微网站建设公司哪家好,购买一级域名做网站,广东广州网点快速网站建设,mianf网站linux下动态库搜索规则
(1)编译目标代码时指定的动态库搜索路径,也就是RPATH#xff1b;
(2)环境变量LD_LIBRARY_PATH指定的动态库搜索路径#xff1b;
(3)配置文件/etc/ld.so.conf中指定的动态库搜索路径#xff1b;配置完毕后需运行ldconfig命令生效#xff1b;
(4)默…linux下动态库搜索规则
(1)编译目标代码时指定的动态库搜索路径,也就是RPATH
(2)环境变量LD_LIBRARY_PATH指定的动态库搜索路径
(3)配置文件/etc/ld.so.conf中指定的动态库搜索路径配置完毕后需运行ldconfig命令生效
(4)默认的动态库搜索路径/lib;
(5)默认的动态库搜索路径/usr/lib;
即从(1)到(5)依次搜索。
如果程序运行时存在找不到库的问题自然也可根据上述库的搜索规则做出应对方案。
首先是通过指定环境变量LD_LIBRARY_PATH和修改配置文件/etc/ld.so.conf的方式这两种方式的作用域是全局的弊端在于使用太多会污染系统环境且会影响到其他程序的执行因此常用于调试。
其次是把需要的库放到系统默认的动态库搜索路径下这种方式的作用域也是全局的。倘若需要的动态库是某个特定的库放到系统路径下也无妨但若是某个开源库且其他程序可能会用到如OpenSSL库等这样做就可能会导致其他程序发生问题。
最后最优解还是在程序编译链接时加入-rpath 参数指明可执行文件在寻找.so文件时的第一优先位置。其中库的路径信息保存在可执行文件中运行时会直接到该路径查找库避免了使用LD_LIBRARY_PATH环境变量查找。这种方式既不会污染系统环境也非常方便。
当然该最佳解决方式是需要重新编译链接程序的如果不想这么做或者条件不允许怎么办呢有没有什么办法可以让程序优先加载当前目录的动态库答案是设置环境变量LD_LIBRARY_PATH设置方法有三种
(1)临时修改在终端输入export LD_LIBRARY_PATH./终端关掉就失效
(2) 修改~/.bash_profile或~/.bashrc文件,在文件末尾输入LD_LIBRARY_PATH./ 和 export LD_LIBRARY_PATH注此方式仅对当前登录用户有效
(3)修改/etc/profile文件在末尾输入LD_LIBRARY_PATH./ 和 export LD_LIBRARY_PATH此方式对所有用户有效。
方法1 让/etc/profile文件修改后立即生效 ,可以使用如下命令: # . /etc/profile 注意: . 和 /etc/profile 有空格
方法2 使用source命令 source /etc/profile