引子

近日,服务器迁移后,偷懒未重新编译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下动态链接库加载路径及搜索路径问题相关推荐

  1. linux path在哪个文件夹,linux PATH环境变量全解析

    linux PATH环境变量全解析 关于PATH的作用:  www.2cto.com PATH说简单点就是一个字符串变量,当输入命令的时候LINUX会去查找PATH里面记录的路径. 比如在根目录/下可 ...

  2. LINUX PATH环境变量

    设置PATH环境变量: 第一种方法: 在用户主目录下有一个 .bashrc 文件,可以在此文件中加入 PATH 的设置如下: export PATH="$PATH:/your path1/: ...

  3. Linux显示环境变量PATH的值,Linux PATH环境变量

    Linux PATH环境变量教程 Linux PATH环境变量说明 也就是说当用户在 如果命令或者程序的位置没有包括在 PATH 变量中,那么如果不使用绝对路径的话, shell 是没法找到的.如果想 ...

  4. linux如何确定共享库路径,摘录Linux下动态共享库加载时的搜索路径详解

    对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似"error while loading shared libraries"这样的错误,这是典型的因为需要的动态库不在动态链接器 ...

  5. linux path环境变量 删除,Linux系统添加、修改、删除PATH环境变量

    一.   添加环境变量 (Bash shell中用export,C shell中用setenv) 1.直接在终端修改: export PATH=$PATH:software_installation_ ...

  6. linux path环境变量加一个目录,linux – PYTHONPATH环境变量……之后如何创建每个子目录?...

    这不是PYTHONPATH的作用方式; PYTHONPATH将其搜索路径与shell PATH区别对待.假设我这样做: $mkdir /home/jsmith/python $cd /home/jsm ...

  7. linux path环境变量起什么作用,shell基础(5)PATH环境变量的作用和使用方法

    释放双眼,带上耳机,听听看~! 关于PATH的作用 PATH说简单点就是一个字符串变量,当输入命令的时候LINUX会去查找PATH里面记录的路径.比如在根目录/下可以输入命令ls,在/usr目录下也可 ...

  8. linux java环境变量不生效_Linux下java环境变量配置问题,解决 重新打开bash后JDK环境变量无效问题...

    Linux下配置JDK实际上是很简单的,我按照网上的教程进行如下配置,在 /etc/profile 文件中最后添加: export JAVA_HOME=/home/son/jdk1.8.0_144 e ...

  9. linux 添加path环境变量中,在Linux里设置环境变量PATH的方法是什?

    我的mips-linux-gcc编译器在"/opt/au1200_rm/build_tools/bin"目录下,build_tools就是我的编译工具,则有如下三种方法来设置环境变 ...

最新文章

  1. TypeError: cannot concatenate ‘str‘ and ‘list‘ objects
  2. 【Ubuntu】VirtualBox+ubuntu中显示摄像头
  3. 动态开辟二维数组的两种方案及位体
  4. 设计模式的征途—21.迭代器(Iterator)模式
  5. 2017云栖大会·杭州峰会:《在线用户行为分析:基于流式计算的数据处理及应用》之《数据可视化:构建实时动态运营数据分析大屏》篇...
  6. linux3.4 内核裁剪,05-S3C2440学习之内核(移植)linux3.4.2移植(2)之yffs2文件系统移植+内核裁剪+内核制作补丁...
  7. unity中如何解决镜头穿透模型?
  8. mysql INFORMATION_SCHEMA COLUMNS 解释
  9. laravel的安装
  10. 3月1日Azure夜校第三场继续开始
  11. 起售价仅7699元!全新折叠旗舰OPPO Find N发布
  12. 按键精灵引流脚本实操
  13. 在多媒体计算机中静态媒体是指,《多媒体技术及应用》按章复习题
  14. VS的C++调试教程
  15. 十大热门语言(程序员必备之路)
  16. Python快速生成gif图
  17. XTP Python Api 接口编译
  18. NULL,0,`0`,`\0`,0你分得清吗?
  19. 获取textarea标签中的换行符和空格
  20. Altium Designer初学教程(一)

热门文章

  1. Python PIL反色混合
  2. 理解图像的傅里叶变换(细心分析)
  3. _matroska_decode_buffer in
  4. android 常见异常解决
  5. calcite mysql_Apache顶级项目 Calcite使用介绍
  6. CreateProcess failed: The system cannot find the file specified.
  7. 提高显卡性能软件_华硕RTX30系显卡亮相
  8. 【Linux网络编程笔记】TCP短连接产生大量TIME_WAIT导致无法对外建立新TCP连接的原因及解决方法—实践篇
  9. Android 手势返回上一界面 亲测可用
  10. python日期函数引用_Python pandas.to_datetime函数方法的使用