当前位置: 首页 > news >正文

linux编译基础知识-库文件标准路径

在Linux系统中,ld(链接器)和ld-linux(动态加载器)的默认搜索路径可通过以下方法查看。二者的作用阶段不同:ld用于​​编译时​​链接库,ld-linux用于​​运行时​​加载动态库。

🔧 一、查看 ld(编译时链接器)的默认搜索路径

ld是编译阶段的链接器,其默认库搜索路径(静态库 .a和动态库 .so)可通过以下方式查看:​​

1. ld --verbose:

ld --verbose | grep SEARCH_DIR

输出路径为链接器的内置搜索目录

SEARCH_DIR("=/usr/x86_64-linux-gnu/lib64"); 
SEARCH_DIR("=/lib/x86_64-linux-gnu");
SEARCH_DIR("=/usr/lib/x86_64-linux-gnu");
SEARCH_DIR("=/usr/local/lib64");
SEARCH_DIR("=/lib64");
SEARCH_DIR("=/usr/lib64");
SEARCH_DIR("=/usr/local/lib");
SEARCH_DIR("=/lib");
SEARCH_DIR("=/usr/lib");

2. ​​gcc -print-search-dirs

gcc -print-search-dirs命令​​查看GCC的完整搜索路径(含库路径):

gcc -print-search-dirs | grep libraries

输出中的 libraries项包含库搜索路径。

3. ​​环境变量 LIBRARY_PATH​​

若设置了 LIBRARY_PATH,链接器会优先搜索其指定的路径(优先级低于 -L参数):

echo $LIBRARY_PATH

🚀 二、查看 ld-linux(运行时动态加载器)的默认搜索路径

ld-linux(如 ld-linux-x86-64.so.2)在程序运行时加载动态库,其路径搜索顺序如下:

1. ​​ldconfig -v

​​ldconfig -v命令​​查看系统缓存的动态库路径(来自 /etc/ld.so.conf和 /etc/ld.so.conf.d/):

ldconfig -v 2>/dev/null | grep -v ^$'\t'

输出示例:

/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
/usr/local/lib

2. ​​ /etc/ld.so.conf​​:

查看配置文件 /etc/ld.so.conf​​系统级动态库路径配置文件

cat /etc/ld.so.conf

通常包含:

include /etc/ld.so.conf.d/*.conf

再检查子配置:

cat /etc/ld.so.conf.d/*.conf

3. strace

​​strace跟踪库加载过程​​通过系统调用跟踪程序加载库的路径:

strace -e openat ./your_program 2>&1 | grep "\.so"

输出中会显示尝试打开的库文件路径。

4. LD_DEBUG

​​环境变量 LD_DEBUG​​启用调试模式查看详细加载过程:

LD_DEBUG=libs ./your_program

输出包含每一步的库搜索路径和加载结果。

⚙️ 三、路径优先级总结

1. 编译时(ld)搜索顺序:

  • -L指定的路径
  • LIBRARY_PATH环境变量
  • 内置 SEARCH_DIR路径
  • 默认系统路径(/lib, /usr/lib)

2. 运行时(ld-linux)搜索顺序:

  • 可执行文件的 RPATH/RUNPATH(编译时通过 -Wl,-rpath=设置)
  • LD_LIBRARY_PATH环境变量
  • /etc/ld.so.cache缓存(来自 ld.so.conf)
  • 默认路径:/lib→ /usr/lib
http://www.dtcms.com/a/311400.html

相关文章:

  • Docker 的网络模式
  • 3 使用 Jenkins 构建镜像:将你的应用打包成镜像
  • 【20min 急速入门】使用Demucs进行音轨分离
  • ffmpeg命令和ffplay命令详解
  • Java高性能编程实践指南
  • ARM Cortex-M异常处理高级特性详解
  • OpenCV 全解读:核心、源码结构与图像/视频渲染能力深度对比
  • [硬件电路-121]:模拟电路 - 信号处理电路 - 模拟电路中常见的难题
  • 网络编程之原始套接字
  • Anthropic:跨越生产效能拐点的AI增长飞轮
  • [硬件电路-123]:模拟电路 - 信号处理电路 - 常见的高速运放芯片、典型电路、电路实施注意事项
  • 淘宝小程序的坑
  • 阿里云部署微调chatglm3
  • 音视频学习(四十七):模数转换
  • 文心4.5开源测评:国产大模型的轻量化革命与全栈突破
  • Unity_数据持久化_C#处理XML文件
  • Ubuntu18网络连接不上也ping不通网络配置问题排查与解决方法
  • Pyspark的register方法自定义udf函数
  • Android13文件管理USB音乐无专辑图片显示的是同目录其他图片
  • JVM 02 垃圾回收
  • PyTorch基础 :三角函数与特殊运算
  • 隧道照明“隐形革命”:智能控制如何破解安全与节能双重命题
  • k8s集群部署(脚本版)
  • 面经——电子电路技术知识详解
  • 【Leetcode hot 100】49.字母异位词分组
  • 详解Python标准库之互联网数据处理
  • winscp 连openwrt 返回127错误码
  • wxPython 实践(六)对话框
  • 【iOS】strong和copy工作流程探寻、OC属性关键字复习
  • Android 运行 deno 的新方法 (3): Termux 胖喵安初