当前位置: 首页 > backend >正文

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)。
http://www.xdnf.cn/news/16768.html

相关文章:

  • 在Idea中,配置maven
  • Galaxea机器人由星海图人工智能科技有限公司研发的高性能仿人形机器人
  • 【C语言】预处理详解
  • 高防服务器租用:保障数据安全
  • Nginx跨域问题与 MIME 类型错误深度排错指南:解决 MIME type of “application/octet-stream“ 报错
  • PyTorch分布式训练深度指南
  • 26数据结构-顺序表
  • 【数据结构与算法】21.合并两个有序链表(LeetCode)
  • 如何将消息转移到新 iPhone
  • 深入剖析Spring IOC容器——原理、源码与实践全解析
  • Linux---编辑器vim
  • 嵌入式学习笔记-MCU阶段-DAY10ESP8266模块
  • 初识微服务
  • 飞算 JavaAI 中 SQL 另存为脚本功能详解
  • ZKmall开源商城微服务架构电商平台:服务注册与配置中心设计
  • 充电桩与照明“联动”创新:智慧灯杆破解新能源基建难题
  • 微服务消息队列之RabbitMQ,深入了解
  • 【unity小技巧】封装unity适合2D3D进行鼠标射线检测,获取鼠标位置信息检测工具类
  • Java设计模式之行为型模式(解释器模式)实现方式详解
  • Elasticsearch 集群管理核心 API 指南:健康、状态、分片诊断与运维实战
  • 调试 Rust 生成的 WebAssembly
  • 工业级蓝光三维扫描仪:汽车零部件高精度检测的利器
  • Python LRU缓存应用与示例
  • 守护数字核心:主机安全的重要性与全方位防护指南
  • zabbix的PostgreSQL监控模板中文环境采集问题处理
  • JsHook入门
  • Nginx 来正确地托管网站服务
  • 汇川ITS7100E触摸屏交互界面开发(二)界面开发软件使用记录
  • 使用python连接MongoDB
  • 【RAG 检索排序详解】RRF vs Reranker:原理、区别与实战应用