linux path环境变量检索目录,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下动态链接库加载路径及搜索路径问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
linux path环境变量检索目录,Linux下动态链接库加载路径及搜索路径问题相关推荐
- linux path在哪个文件夹,linux PATH环境变量全解析
linux PATH环境变量全解析 关于PATH的作用: www.2cto.com PATH说简单点就是一个字符串变量,当输入命令的时候LINUX会去查找PATH里面记录的路径. 比如在根目录/下可 ...
- LINUX PATH环境变量
设置PATH环境变量: 第一种方法: 在用户主目录下有一个 .bashrc 文件,可以在此文件中加入 PATH 的设置如下: export PATH="$PATH:/your path1/: ...
- Linux显示环境变量PATH的值,Linux PATH环境变量
Linux PATH环境变量教程 Linux PATH环境变量说明 也就是说当用户在 如果命令或者程序的位置没有包括在 PATH 变量中,那么如果不使用绝对路径的话, shell 是没法找到的.如果想 ...
- linux如何确定共享库路径,摘录Linux下动态共享库加载时的搜索路径详解
对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似"error while loading shared libraries"这样的错误,这是典型的因为需要的动态库不在动态链接器 ...
- linux path环境变量 删除,Linux系统添加、修改、删除PATH环境变量
一. 添加环境变量 (Bash shell中用export,C shell中用setenv) 1.直接在终端修改: export PATH=$PATH:software_installation_ ...
- linux path环境变量加一个目录,linux – PYTHONPATH环境变量……之后如何创建每个子目录?...
这不是PYTHONPATH的作用方式; PYTHONPATH将其搜索路径与shell PATH区别对待.假设我这样做: $mkdir /home/jsmith/python $cd /home/jsm ...
- linux path环境变量起什么作用,shell基础(5)PATH环境变量的作用和使用方法
释放双眼,带上耳机,听听看~! 关于PATH的作用 PATH说简单点就是一个字符串变量,当输入命令的时候LINUX会去查找PATH里面记录的路径.比如在根目录/下可以输入命令ls,在/usr目录下也可 ...
- linux java环境变量不生效_Linux下java环境变量配置问题,解决 重新打开bash后JDK环境变量无效问题...
Linux下配置JDK实际上是很简单的,我按照网上的教程进行如下配置,在 /etc/profile 文件中最后添加: export JAVA_HOME=/home/son/jdk1.8.0_144 e ...
- linux 添加path环境变量中,在Linux里设置环境变量PATH的方法是什?
我的mips-linux-gcc编译器在"/opt/au1200_rm/build_tools/bin"目录下,build_tools就是我的编译工具,则有如下三种方法来设置环境变 ...
最新文章
- TypeError: cannot concatenate ‘str‘ and ‘list‘ objects
- 【Ubuntu】VirtualBox+ubuntu中显示摄像头
- 动态开辟二维数组的两种方案及位体
- 设计模式的征途—21.迭代器(Iterator)模式
- 2017云栖大会·杭州峰会:《在线用户行为分析:基于流式计算的数据处理及应用》之《数据可视化:构建实时动态运营数据分析大屏》篇...
- linux3.4 内核裁剪,05-S3C2440学习之内核(移植)linux3.4.2移植(2)之yffs2文件系统移植+内核裁剪+内核制作补丁...
- unity中如何解决镜头穿透模型?
- mysql INFORMATION_SCHEMA COLUMNS 解释
- laravel的安装
- 3月1日Azure夜校第三场继续开始
- 起售价仅7699元!全新折叠旗舰OPPO Find N发布
- 按键精灵引流脚本实操
- 在多媒体计算机中静态媒体是指,《多媒体技术及应用》按章复习题
- VS的C++调试教程
- 十大热门语言(程序员必备之路)
- Python快速生成gif图
- XTP Python Api 接口编译
- NULL,0,`0`,`\0`,0你分得清吗?
- 获取textarea标签中的换行符和空格
- Altium Designer初学教程(一)
热门文章
- Python PIL反色混合
- 理解图像的傅里叶变换(细心分析)
- _matroska_decode_buffer in
- android 常见异常解决
- calcite mysql_Apache顶级项目 Calcite使用介绍
- CreateProcess failed: The system cannot find the file specified.
- 提高显卡性能软件_华硕RTX30系显卡亮相
- 【Linux网络编程笔记】TCP短连接产生大量TIME_WAIT导致无法对外建立新TCP连接的原因及解决方法—实践篇
- Android 手势返回上一界面 亲测可用
- python日期函数引用_Python pandas.to_datetime函数方法的使用