动态库链接路径

文章讨论了如何使用`ldd`检查依赖库,以及在编译时通过`-Wl,-rpath`选项设定运行时动态库的搜索路径。当执行文件与动态库位于不同路径时,需要正确设置`rpath`以确保程序能找到依赖的库。`$$ORIGIN`宏用于保持可执行文件与动态库的相对路径,允许程序在不同目录下正确运行。
摘要由CSDN通过智能技术生成

查看依赖库

ldd file

nli@nli-lab:$ ldd ./build/bin/oob_i2c
        linux-vdso.so.1 (0x00007ffe3e7c0000)
        liboobi2c.so => /home/nli/project/d6/d6_oob_update_tool/./build/bin/liboobi2c.so (0x00007febb7c9a000)
        libc.so.6 => /lib64/libc.so.6 (0x00007febb78d4000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007febb76d0000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007febb74b0000)
        /lib64/ld-linux-x86-64.so.2 (0x00007febb7ea0000)

路径

环境变量

LD_LIBRARY_PATH
运行时默认搜索动态库的路径

编译指定

-Wl,-rpath=<path>
设置执行时搜索动态库的路径

├───build
│   ├───bin
│   │   ├───libxx1.so
│   │   └───run
│   └───obj
└───src
固定路径

-Wl,-rpath=./设置./路径为动态库搜索路径

正确执行
cd ./build/bin
./run
----
出错
cd ./build
./bin/run

运行时./路径为./build,动态库位置./build/bin,所以识别不到动态库。

动态路径

-Wl,-rpath='$$ORIGIN'
参考

正确执行
cd ./build/bin
./run
----
正确执行
cd ./build
./bin/run

保持可执行文件与动态库路径的固定关系,可以更换执行时所在路径。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怦然心动如往昔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值