Linux 运行时 寻找动态库过程

本文介绍了如何使用LDD命令获取程序运行时所需的动态库,并详细解释了程序执行过程中的动态链接步骤,包括通过execve系统调用执行程序、请求动态链接库进行链接以及在不同路径下查找依赖库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1:通过命令 LDD  XXX 可以得到程序运行时依赖的动态库

2:通过系统调用函数 execve,执行该程序,

3:用 [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2] 动态链接库  链接需要的动态库

4:在默认路径下寻找 路径+依赖库名称

5:在open("/etc/ld.so.cache)中寻找  open("/test/a/d/libka.so.1", O_RDONLY|O_CLOEXEC) = 3 




### 如何在Linux运行命令指定动态库路径 当需要在Linux环境中执行程序并希望该程序使用特定位置的共享库而非默认搜索路径中的库文件,可以采用多种方法来临或永久地修改动态链接器的行为。 #### 使用`LD_LIBRARY_PATH`环境变量 最简单的方式是在调用命令之前设置`LD_LIBRARY_PATH`环境变量。此变量告知加载器除了标准目录外还应在哪些地方寻找所需的.so文件[^3]。 ```bash export LD_LIBRARY_PATH=/path/to/custom/lib:$LD_LIBRARY_PATH ./your_program ``` 这种方式适用于一次性操作或是交互式的shell会话内;对于脚本来说,则可以在启动应用程序前加入上述两行指令。 #### 利用`ldconfig`配置缓存 如果打算让自定义库成为系统的一部分供多个应用访问,那么应该编辑 `/etc/ld.so.conf.d/*.conf` 文件并将新路径添加进去,之后通过 `sudo ldconfig` 更新全局缓存[^1]。这使得任何依赖这些库的应用都能自动找到它们而无需额外设定。 #### 命令行参数传递给解释器 某些情况下可以直接向可执行文件提供选项以改变其行为。例如,在编译阶段可以通过 `-rpath` 参数嵌入固定的查找地址到二进制里去。不过这种方法较为少见且灵活性较差。 为了确保使用的库路径符合 Linux Standard Base 目录结构的要求,建议优先考虑利用现有的标准化路径如 `/usr/local/lib`, `/opt/<package>/lib` 等作为存放第三方库的位置,并借助前述手段之一使能之。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Farmwang

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

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

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

打赏作者

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

抵扣说明:

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

余额充值