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)。
相关推荐
..Move...6 分钟前
快速搭建Docker私有仓库指南
运维·docker·容器
小小的木头人2 小时前
Windows Docker desktop 部署
运维·kafka
黑翼杰克斯2 小时前
如何裁剪u-boot,保留其必要功能,使体积尽可能小
linux·1024程序员节
fat house cat_2 小时前
【netty】基于主从Reactor多线程模型|如何解决粘包拆包问题|零拷贝
java·服务器·网络·netty
wanhengidc2 小时前
云手机和虚拟机的区别都有哪些?
运维·服务器·安全·智能手机·玩游戏
williamdsy2 小时前
【Docker】[特殊字符] Docker 部署完全指南 - 从本地开发到云服务器
服务器·docker·开发部署流程
码农周3 小时前
从零搭建vsftpd服务器:避坑指南+实战解决方案
运维·服务器
jingshaoyou4 小时前
ubuntu 搭建SVN服务器
服务器·ubuntu·svn
cellurw4 小时前
Day69 SQLite3动态库移植 + BMP图像解析显示 + 进度条控件设计与动态文本管理
linux
nono牛5 小时前
Linux基础指令大全(快速上手)
linux·服务器·windows·智能手机