美文网首页
Linux C/C++动态库加载位置

Linux C/C++动态库加载位置

作者: Caucher | 来源:发表于2022-08-08 17:09 被阅读0次

在Linux环境下编译链接C/C++项目,经常需要加载动态库,包括系统默认的库和外部的库。具体来说,加载库可能会在编译阶段和运行阶段发生:

1. 编译时定位库:

在编译命令中给出库文件的位置,-L参数给出动态库的路径(相对或绝对),-l参数给出库名(不需要前缀lib和后缀.so,.lib等)

2. 运行时定位库:

运行时寻找库的路径,分若干优先级:

  1. $LD_LIBRARY_PATH:从该环境变量对应的路径中找;
  2. 可执行二进制文件的DT_RUNPATH字段,一般由Makefile负责写进去;
  3. /etc/ld.so.conf:这个文件里有一些路径
  4. 默认路径:/lib/usr/lib

实际交付项目时,不应使用第一条,依赖于用户去配置,一般是用第二条,把需要的外部依赖打包进项目中,通过runpath去寻找动态库,这样不会给用户带来困扰。
第三条的话,一般是作为用户来说,会把/usr/local/lib加进去,囊括一些通用的库,比如boost,或者用户自己常用的库。
第四条主要是系统库,一般不要直接往里面添加外部库。

相关文章

网友评论

      本文标题:Linux C/C++动态库加载位置

      本文链接:https://www.haomeiwen.com/subject/ekvbwrtx.html