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)。
相关推荐
java_logo16 小时前
2026 Docker 国内镜像加速配置教程
运维·docker·容器·docker镜像·docker镜像源·docker镜像加速·docker镜像国内库
搜狐技术产品小编202316 小时前
破局与重构:纯端侧 Android 自动化引擎的尝试与未来推演
android·运维·重构·自动化
bsauce16 小时前
【kernel exploit】CVE-2026-23271 perf_event竞态UAF漏洞-ROP提权
linux·linux内核·内核漏洞·内核漏洞利用
深圳市晶科鑫实业有限公司16 小时前
5G与AIoT时代:如何选择晶振常用频率?
服务器·单片机·物联网·5g·智能路由器·健康医疗·信息与通信
三十..17 小时前
Ceph分布式存储核心技术精要与运维实践指南
运维·分布式·ceph
tianyuanwo17 小时前
Jenkins × Gerrit 集成:自动触发构建的全流程解析
运维·servlet·jenkins
Hehuyi_In17 小时前
从优雅到爆烈 —— Linux全力回收内存的一生
linux·内核·内存·memory·回收
顾默@17 小时前
双系统Ubuntu18.04升级22.04,安装docker进行openclaw安装
运维·docker·容器
杨充17 小时前
1.1 数据编码设计原理
linux·运维·网络·底层原理·数据编码
fan_music17 小时前
Linux I/O
linux