Linux动态库加载搜索路径的示例分析
admin
2023-02-15 01:00:09
0

动态链接器ld.so按照下面的顺序来搜索需要的动态共享库: 
1.ELF可执行文件中动态段中DT_RPATH所指定的路径。这实际上是通过一种不算很常用,却比较实用的方法所设置的:编译目标代码时,可以对gcc/g++加入链接参数“-Wl,-rpath”指定动态库搜索路径; 
2.环境变量LD_LIBRARY_PATH指定的动态库搜索路径; 
3./etc/ld.so.cache中所缓存的动态库路径(如果支持ld.so.cache的话)。这可以通过修改配置文件/etc/ld.so.conf中指定的动态库搜索路径来改变; 
4.默认的动态库搜索路径/lib或者是/lib64; 
5.默认的动态库搜索路径/usr/lib或者是/usr/lib64

简单例子

root@4c9f329b2677:/home/test# cat printf.cpp
#include

void Print()
{
 std::cout<<"Hello,world!"<}

动态库编译

root@4c9f329b2677:/home/test# g++ printf.cpp -shared -fPIC -o libprintf.so

root@4c9f329b2677:/home/test# cat main.cpp
#include
#include

extern void Print();

int main()
{
 Print();
 return 0;
}

1)指定动态库的搜索路径为当前本地路径

g++ main.cpp -L./  -lprintf -Wl,-rpath=./

查看可执行程序,内部的细节

root@4c9f329b2677:/home/test# readelf -d a.out

Dynamic section at offset 0xe08 contains 26 entries:
  Tag        Type                         Name/Value
 0x0000000000000001 (NEEDED)             Shared library: [libprintf.so]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
 0x000000000000000f (RPATH)              Library rpath: [./]

指定了动态库链接的位置

2)export LD_LIBRARY_PATH=./ 

g++ main.cpp -L./  -lprintf

去掉指定目录指令

# unset LD_LIBRARY_PATH 
# echo $LD_LIBRARY_PATH 

相关内容

热门资讯

全球首台!跟“烧开水”说再见 “人类科技的尽头就是烧开水吗?” 从首次蒸汽发电至今,人类利用“烧开水”获取电力已有140余年历史。...
终于明白“衡阳十胡卡究竟有挂吗... 您好:衡阳十胡卡这款游戏可以开挂,确实是有挂的,需要了解加客服微信【4282891】很多玩家在这款游...
江西“科技副总”赋能产业高质量... 12月29日,江西省“科技副总”专项计划发布会在江西南昌举行。2024年,江西省启动实施“科技副总”...
今日重大发现“开心武汉花到底是... 您好:开心武汉花这款游戏可以开挂,确实是有挂的,需要了解加客服微信【4282891】很多玩家在这款游...
【今日要闻】“相约福建麻将到底... 网上科普关于“相约福建麻将有没有挂”话题很是火热,小编也是针对相约福建麻将作*弊开挂的方法以及开挂对...
玩家攻略科普“新上游炸/金/花... 家人们!今天小编来为大家解答新上游炸/金/花透视挂怎么安装这个问题咨询软件客服徽9752949的挂在...
今日重大发现“丽水都莱是不是有... 您好:丽水都莱这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9752949】很多玩家在这款游戏...
【第一消息】“至尊麻将有没有挂... 【第一消息】“至尊麻将有没有挂?”(外卦神器下载)您好,至尊麻将这个游戏其实有挂的,确实是有挂的,需...
【第一资讯】“掌中宝麻将是不是... 有 亲,根据资深记者爆料掌中宝麻将是可以开挂的,确实有挂(咨询软件无需打...
我来教教您“白金岛十胡卡开挂神... 网上科普关于“白金岛十胡卡有没有挂”话题很是火热,小编也是针对白金岛十胡卡作*弊开挂的方法以及开挂对...