• 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 居然不在标准路径之列。
  • 相关阅读:
    树莓派开机黑屏只有光标无法进入图形界面桌面
    Python GDAL矢量转栅格详解
    Emacs基础使用教程及常见命令整理
    Elasticsearch
    微信公众号正确使用开放标签wxopenlaunchweapp
    Docker安装Clickhouse
    Docker 常用命令
    Spring Cloud Gateway java.lang.IllegalStateException: Invalid host: lb://manage_web
    安卓手机上部署nodejs服务器
    企业物联网平台如何选择?
  • 原文地址:https://www.cnblogs.com/hdjsjlbs/p/3010478.html
Copyright © 2020-2023  润新知