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)。
相关推荐
Predestination王瀞潞1 小时前
Cuda的安装
linux·人工智能·深度学习
石像鬼₧魂石2 小时前
如何使用Kali Linux自带字典进行密码破解?
linux·运维·服务器
q***65692 小时前
Nginx反向代理出现502 Bad Gateway问题的解决方案
运维·nginx·gateway
JiMoKuangXiangQu2 小时前
Linux 时间子系统 (1):基础框架概述
linux·timer·时间子系统·timekeeping
天选之女wow2 小时前
【Hard——Day8】65.有效数字、68.文本左右对齐、76.最小覆盖子串
linux·运维·redis·算法·leetcode
精英的英2 小时前
【嵌入式Linux开发】如何在Windows上开发Linux ARM版本QT程序
linux·arm开发·windows
咯哦哦哦哦2 小时前
linux patchelf工具 用法
linux·vscode·编辑器·gcc
努力的小帅2 小时前
Linux_进程控制(Linux入门到精通)
linux·网络·shell·进程创建·linux入门
睡觉然后上课2 小时前
如何让虚拟机运行速度翻倍
linux·arm开发·windows
喜欢你,还有大家3 小时前
DaemonSet && service && ingress的
linux·架构·kubernetes