当前位置: 技术问答>linux和unix
linux程序编译链接后无法运行,找不到so文件
来源: 互联网 发布时间:2016-08-19
本文导语: 我编译成功了,链接也正常了,用的是动态链接,运行时提示找不到刚才链接用的.so文件,我把.so文件复制到程序相应的目录也不能用,然后想复制到/usr/lib下面又复制不进去,这种情况怎么办? | 首先...
我编译成功了,链接也正常了,用的是动态链接,运行时提示找不到刚才链接用的.so文件,我把.so文件复制到程序相应的目录也不能用,然后想复制到/usr/lib下面又复制不进去,这种情况怎么办?
|
首先,lz需要明白,动态库的搜索路径先后顺序:
1、编译目标代码时指定的动态库搜索路径:在编译的时候,可以指定-Wl,-rpath=你的路径
2、环境变量LD_LIBRARY_PATH指定的动态库搜索路径;
3、配置文件/etc/ld.so.conf中指定的动态库搜索路径
4、默认的动态库搜索路径/lib
5、默认的动态库搜索路径 /usr/lib
明白这些了,那么可以有很多种解决途径~!
1、编译的时候加上-Wl,-rpath=。。。。
2、使用export LD_LIBRARY_PATH=....
3、将路径追加到/etc/ld.so.conf中
4、将so拷贝到/lib目录下
5、将so拷贝到/usr/lib目录下
需要注意的是:后三种方式,需要相应的权限才可以(root),lz出现的复制不了,应该就是权限的问题!
还有,采用第三种方式在加入/etc/ld.so.conf文件后,需要刷新一下sudo ldconfig