linux编译基础知识-编译时路径和运行时路径

在 Linux 系统中,程序链接分为​​编译时链接​​(构建阶段)和​​运行时链接​​(执行阶段),两者路径设置相互独立。以下是核心区别和配置方法:

⚙️ 一、编译时链接路径(Build-time Linking)

作用阶段:程序编译/链接期间(由链接器 ld处理)。
搜索顺序​​:

  • ​​-L显式指定路径​​:优先级最高,如 gcc -L/path/to/libs -lmylib。
  • -rpath-link路径:解决间接依赖(如 libA.so依赖 libB.so),仅链接时有效。
  • LIBRARY_PATH环境变量:全局设置编译时库搜索路径,如 export LIBRARY_PATH=/path/to/libs:$LIBRARY_PATH。
  • 预定义路径(SEARCH_DIR):链接器内置路径(如 /usr/lib、/lib),可通过 ld --verbose | grep SEARCH_DIR查看。

​​关键特点​​:

  • 仅影响编译阶段,不写入可执行文件;
  • 未找到库会直接导致链接失败(如 cannot find -lmylib)。

🚀 二、运行时链接路径(Run-time Linking)

作用阶段:程序执行期间(由动态链接器 ld-linux.so处理)。
搜索顺序​​:

  • ​​-rpath嵌入路径​​:通过 -Wl,-rpath=/path/to/libs编译时写入可执行文件,优先级最高。
  • LD_LIBRARY_PATH环境变量:临时设置运行时路径,如 export LD_LIBRARY_PATH=/path/to/libs:$LD_LIBRARY_PATH。
  • /etc/ld.so.conf配置​​:系统级路径(需 sudo ldconfig更新缓存)。
  • 默认路径:/lib、/usr/lib等。

​​关键特点​​:

  • 路径需在程序运行时可访问;
  • 未找到库会导致运行时错误(如 error while loading shared libraries)。
相关推荐
xx~t11 小时前
嵌入式——Linux软件编程2
linux·运维·服务器·c语言·学习方法
Shell运维手记11 小时前
Linux (挂载|rpm|yum|源码编译)
linux·运维·笔记·网络协议·bash
-今昭-11 小时前
MFS高可用负载均衡
运维·负载均衡
ITyunwei098711 小时前
SSL 证书过期排查实战:openssl + Nginx 4步从发现到续签
运维·网络
郝开11 小时前
Docker Compose 本地环境搭建:kkFileView
运维·docker·容器
QYR_1111 小时前
2032年气相分解设备市场规模达2.25亿美元:VPD向高灵敏度、自动化晶圆污染检测升级
运维·自动化
RisunJan11 小时前
Linux命令-vgchange(修改 LVM 卷组属性)
linux·运维·服务器
ZMacros12 小时前
Buildroot构建文件系统
linux·服务器
herinspace12 小时前
管家婆财贸ERP如何进行基本信息批量搬移
服务器·数据库·管家婆软件·财务软件
仓储管理员202512 小时前
不同业务场景下,如何匹配适配的WMS系统?
大数据·运维·云计算·精选