DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  4737 随笔 :: 2 文章 :: 542 评论 :: 1615万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

继续上一篇《 linux下so动态库一些不为人知的秘密(中) 》介绍so搜索路径,还有一个类似于-path,叫LD_RUN_PATH环境变量, 它也是把路径编译进可执行文件内,不同的是它只设置RPATH。

 [stevenrao] g++ -o demo -L /tmp/  -ltmp main.cpp
 [stevenrao] readelf -d demo
 Dynamic section at offset 0xb98 contains 25 entries:
  Tag        Type                         Name/Value
 0x0000000000000001 (NEEDED)             Shared library: [libtmp.so]
 ....
 0x000000000000000f (RPATH)              Library rpath: [/tmp/]
 
  另外还可以通过配置/etc/ld.so.conf,在其中加入一行
  /tmp/
  这个配置项也是只对运行期有效,并且是全局用户都生效,需要root权限修改,修改完后需要使用命令ldconfig 将 /etc/ld.so.conf 加载到ld.so.cache中,避免重启系统就可以立即生效。
  除了前面介绍的那些搜索路径外,还有缺省搜索路径/usr/lib/ /lib/ 目录,可以通过-z nodefaultlib编译选项禁止搜索缺省路径。
  [stevenrao] $ g++ -o demo -z nodefaultlib  -L/tmp -ltmp main.cpp
  [stevenrao] $  ./demo
   ./demo: error while loading shared libraries: libstdc++.so.6: cannot open shared object file
 
  这么多搜索路径,他们有个先后顺序如下
  1、RUMPATH 优先级最高
  2、RPATH   其次
  3、LD_LIBRARY_PATH
  4、/etc/ld.so.cache
  5、/usr/lib/ /lib/
 
  查看一个程序搜索其各个动态库另一个简单的办法是使用 LD_DEBUG这个环境变量;
  [stevenrao] $ export LD_DEBUG=libs
  [stevenrao] $ ./demo
  下一篇介绍动态库内符号问题
posted on   DoubleLi  阅读(377)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2013-03-26 C++中int 转换成 string类型
2013-03-26 OCX控件在IE中无法侦测到键盘消息( MFC ActiveX Control in IE Doesn't Detect Keystrokes)
2013-03-26 IE中ocx控件的无模式对话框不接收方向键等键盘消息的问题的解决办法
2013-03-26 OCX控件避免弹出安全警告的类
点击右上角即可分享
微信分享提示