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)。
相关推荐
2501_945837431 天前
火山引擎hfr4i高主频实例,4.0GHz睿频突破高性能场景上限
服务器
阿湯哥1 天前
Reactor响应式编程中Flux和FluxSink
运维·服务器·网络
爱装代码的小瓶子1 天前
【C++与Linux】文件篇(2)- 文件操作的系统接口详解
linux·c++
桌面运维家1 天前
vDisk考场环境网络瓶颈怎么定位?快速排查指南
运维·服务器·网络
Cisco_hw_zte1 天前
挂载大容量磁盘【Linux系统】
linux·运维·服务器
DolphinScheduler社区1 天前
Linux 环境下,Apache DolphinScheduler 如何驱动 Flink 消费 Kafka 数据?
linux·flink·kafka·开源·apache·海豚调度·大数据工作流调度
腾科IT教育1 天前
华为认证报考常见问题解析
运维·服务器·华为认证·hcia
_运维那些事儿1 天前
GitLabCI-CD入门
运维·ci/cd·容器·云计算·k8s·运维开发
艾莉丝努力练剑1 天前
【AI时代的赋能与重构】当AI成为创作环境的一部分:机遇、挑战与应对路径
linux·c++·人工智能·python·ai·脉脉·ama
杜子不疼.1 天前
【Linux】Ext系列文件系统(一):文件系统的初识
linux·运维·服务器