• linux中可执行程序搜索动态链接库的顺序


    以下按照程序寻找动态库的优先级说明:

    1.查看可执行文件中的.dynamic 段是否包含了一个叫DT_RPATH的项(它是一个以冒号分隔的库文件搜索目录列表)

    怎么设置这个选项?

    需要在编译连接程序的时候使用-Wl,-rpath选项,假设一个程序test需要使用liblib.so库,如下所示进行编译连接:

    g++ -o test -L. -llib -Wl,rpath=./ test.cpp
    

    或者在qt 中的pro文件添加

    QMAKE_RPATH += {path}
    

    这样在执行test程序时,test便会先到./即当前目录下查找所需要的动态库liblib.so

    2. 查找是否存在环境变量 LD_LIBRARY_PATH(它是一个以冒号分隔的库文件搜索目录列表)

    怎么设置这个选项?

    当然是设置linux下的环境变量就可以了

    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./
    

    当然,这种方法是对当前登录生效的。如果想开机即有效,跟其它环境变量的设置也是一样,需要修改一些配置文件。

    3.查看库高速缓存文件 /etc/ld.so.conf

    它包含了库名和路径的一个对应列表,如果库名存在,连接器就使用它对应的路径,用这个查找方法能够找到大部分的库。

    怎么设置这个选项

    可以直接编辑ld.so.conf加入需要查找的路径,也可以在/etc/ld.so.conf.d目录下的己有文件中加入路径,或者在该目录下新建一个文件(名字为*.conf即可),再把需要的路径加入到该文件中。最后执行ldconfig即可生效。

    4.查找默认路径/lib和/usr/lib

    如果经过了以上的步骤仍然查找失败,则将报错并退出相关程序。

    ps:对于前三个步骤来说,我们均是可以进行设置调整的,其中第三个步骤中的设置需要root权限才能进行,且会影响所有的程序。当使用第一、第二中的方法进行了设置调整后,我们便可以使多种版本的库共存在同一环境下进行测试,同名也无所谓。

  • 相关阅读:
    整站爬虫命令
    小故事集锦
    中国最经典广告语大全
    常用的正则表达式
    特殊成员方法
    使用super函数----增量重写普通方法和构造方法
    重写普通方法和构造方法------原类的方法会被覆盖
    Python的数据类型与数据结构
    类和对象
    生产者-消费者问题与quene模块
  • 原文地址:https://www.cnblogs.com/xl-cnblog/p/14039285.html
Copyright © 2020-2023  润新知