700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Linux 程序运行时报错:找不到库文件[cannot open shared object file: No such file or directory ```](转载)

Linux 程序运行时报错:找不到库文件[cannot open shared object file: No such file or directory ```](转载)

时间:2019-10-28 11:54:44

相关推荐

Linux 程序运行时报错:找不到库文件[cannot open shared object file: No such file or directory ```](转载)

问题展现

$ g++ -Wall -o hellobrowser.exec hellobrowser.c -I/usr/local/include-L/usr/local/lib -lmicrohttpd -ldl$ ./hellobrowser.execerror while loading shared libraries: libmicrohttpd.so.10: cannot openshared object file: No such file or directory

发现/usr/local/lib下有这个库

$ whereis libmicrohttpd$ cd /usr/local/lib$ find libmicrohttpd.so.10

解决方法

1 设置库目录

sudo vi /etc/ld.so.conf

添加一行:/usr/local/lib

然后sudo ldconfig使得生效。这样动态库就会去/usr/local/lib找了。

2 编译命令添加运行时库目录 -Wl,-R

g++ -Wall -o hellobrowser.exec hellobrowser.c -I/usr/local/include -L/usr/local/lib -lmicrohttpd -ldl -Wl,-R /usr/local/lib

3 添加软链接

$ ln -s /usr/local/lib/libmicrohttpd.so.10 /usr/lib/libmicrohttpd.so.10$ ln -s /usr/local/lib/libmicrohttpd.so /usr/lib/libmicrohttpd.so

原因总结

默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件。虽然g++ -L/usr/local/lib虽然能让链接器找到库进行链接,但是运行时链接器却找不到这个库,如果要让软件运行时库文件的路径也得到扩展,那么我们需要增加这个库路径加上-Wl,-R,即添加g++参数“-Wl,-R动态库库路径”。或者修改系统文件/etc/ld.so.conf`,这个文件记录了编译时使用的动态链接库的路径。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。