问题描述:
在Linux操作系统下,当自己在执行自己编译的可执行文件(例如xxx.sh文件等)时,终端会显示“xxx.so文件找不到,没有找到该文件的路径”的提示信息,但是我们自己去找该文件的时候又能够发现这个文件是存在的。
我的问题是在windows下将项目打包为linux格式的包,然后在linux下使用时出现的问题。对该问题的几个知识点我放在最下面的知识补充中了,希望这篇博客能帮助到你。
原因分析:
出现这种问题一般都是在加载一些动态库的时候,在运行可执行文件时找不到相应库文件的路径。
解决方法:
对于找不到动态库路径导致的问题,你需要把找不到的那个文件的路径添加到Linux下的一个配置文件中,具体操作如下(我们以找不到test.so为例,test.so文件所在的目录是*/home/user/code/so*):
(1)在 /etc/ 目录下找到 ld.so.conf 这个配置文件,以管理员的权限用 vim 打开(方便修改),将test.so文件所在的路径添加到ld.so.conf中的最下面(白色的部分),然后保存退出;
(2)然后在终端下执行下面的命令,使我们的修改生效
$sudo /sbin/ldconfig
知识点补充:
1.windows下的动态链接库文件格式为**.dll**,Linux下的动态链接库文件格式为**.so**;
2.windows下访问动态库的方式:现在当前目录下查找,若有,则加载,若没有,则去系统的环境变量目录中查找,找不到就报错;
Linux下访问动态库的方式:直接去系统的环境变量目录中查找,找不到就报错。Linux下库的加载,是通过 /etc/ld.so.conf 和 /etc/ld.so.conf.d/下所有的.conf 进行加载。
参考学习:
https://blog.csdn.net/qq1623803207/article/details/89683659.
https://www.cnblogs.com/xudong-bupt/p/3698294.html.