千家信息网

如何解决Linux中动态链接库加载路径及搜索路径的问题

发表于:2024-11-16 作者:千家信息网编辑
千家信息网最后更新 2024年11月16日,这篇文章将为大家详细讲解有关如何解决Linux中动态链接库加载路径及搜索路径的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。引子近日,服务器迁移后,偷懒未重新编
千家信息网最后更新 2024年11月16日如何解决Linux中动态链接库加载路径及搜索路径的问题

这篇文章将为大家详细讲解有关如何解决Linux中动态链接库加载路径及搜索路径的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

引子

近日,服务器迁移后,偷懒未重新编译nginx的,直接./nginx启动,结果遇到如下问题:
"error while loading shared libraries"
这是是因为需要的动态库不在动态链接器ld.so的搜索路径导致。

ld.so 动态共享库搜索顺序

1、ELF可执行文件中动态段DT_RPATH指定;gcc加入链接参数"-Wl,-rpath"指定动态库搜索路径;
2、环境变量LD_LIBRARY_PATH指定路径;
3、/etc/ld.so.cache中缓存的动态库路径。可以通过修改配置文件/etc/ld.so.conf 增删路径(修改后需要运行ldconfig命令);
4、默认的 /lib/;
5、默认的 /usr/lib/

与动态链接库相关命令

(1)ld 是gcc的链接程序。
(2)ldd是查看可执行文件中所依赖的库的程序,比如想查main程序用到了那些动态库,可以直接 
ldd main
(3)ldconfig用来更新文件/etc/ld.so.conf的修改生效。
(4)nm用来查看.so库中的函数名字,标记是T的就是动态库里面生成的名字。如:nm /lib/libc*.so

Linux 下动态链接库搜索路径问题

Linux动态链接库的搜索路径按优先级排序为:

1.编译目标代码时指定的动态库搜索路径;

在编译时通过gcc 的参数"-Wl,-rpath,"指定。当指定多个动态库搜索路径时,路径之间用冒号":"分隔。

2.环境变量LD_LIBRARY_PATH指定的动态库搜索路径;

3.配置文件/etc/ld.so.conf中指定的动态库搜索路径;

/etc/ld.so.conf的第一行有个引用命令:include ld.so.conf.d/*.conf

因此,最优雅的方式是在ld.so.conf.d目录下创建一个你的程序依赖的配置文件,配置文件内容为程序依赖的动态链接库的路径,一个路径一行。

添加完配置文件后执行ldconfig使其生效。

4.默认的动态库搜索路径/lib;

5.默认的动态库搜索路径/usr/lib;

1、可以用 LD_LIBRARY_PATH 环境变量指定,这个类似于 PATH 机制,比较直观,而且,可以放到 bashrc 中固化下来,也可以放到自己的 .bashrc 中只对本用户起作用;

2、如果启用了 ld.so.cache 的话,系统会在 /etc/ld.so.cache 中存储所有可引用的动态链接库。这个文件的内容可以通过 /etc/ld.so.conf 来指定;这个是比较固定的机制,对全局所有用户都有影响;不过更改设置后需要 root 调用 ldconfig 来刷新一下。

3、默认的标准库路径,这个似乎不用设置就可以。包括 /lib 和 /usr/lib。当然,如果是64位系统,还包括 /lib64 和 /usr/lib64。

4、其它情况,如果只想对某一个特定的应用程序起作用的话,可以在编译时指定搜索路径。gcc 的 -Wl 和 -rpath 参数。

奇怪的是, /usr/local/lib 和 /usr/local/lib64 居然不在标准路径之列。

关于"如何解决Linux中动态链接库加载路径及搜索路径的问题"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

路径 动态 搜索 链接 文件 程序 配置 问题 编译 内容 参数 变量 命令 环境 篇文章 一行 作用 可以通过 名字 更多 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 空间服务器不稳定对网页有影响吗 海康生产网络安全产品不 网络安全学习和考试 服务器cpu挖矿检查 网络安全电子教案模板 互联网科技初创公司HRBP pc端软件开发和发行流程 维修业务通修改数据库名称 电脑服务器基本知识 国际服刺激战场服务器如何更新 软件开发费用是无形资产吗 第三代网络安全新技术 烟草基因组数据库公开了么 国家人口基础数据库 企业网络安全工程师简笔画 可以安装安卓模拟器的云服务器 南非网络犯罪与网络安全法案 软件开发需要发展什么技能 在哪里能找到网络安全课程 农村dna数据库采集怎么剪头发 数据库条数查询 网络安全etf基金怎么样 阿尔法科技先驱数据库 工蜂互联网科技有限公司 上海腾道网络技术有限公司 传奇一个服务器怎么多开界面 青岛软件开发怎么样 新型网络技术价格表格 涞源高速服务器有什么吃的 创谷互联网科技有限公司
0