假设有两个相同的共享库,一个在标准的共享库搜索目录(/lib/i386-linux-gnu), 一个在非标准目录(/home/charles/tmp):
在/home/charles/tmp下有个测试程序main.c,调用共享库里的函数。
用如下的命令编译:
用ldd看一下link的共享库:
可以看出,虽然我们指定了要使用 /home/charles/tmp下的库,但实际上用的还是标准搜索路径下的库。
换句话说,GNU ld 优选搜索标准路径下的文件,然后才是 -L指定的
现在执行
export LD_LIBRARY_PATH=/home/charles/tmp
可见,LD_LIBRARY_PATH指定的路径优选于系统标准目录。
最后尝试一下如下的方法:
gcc main.c -wl,-rpath,/home/charles/tmp -g -o main -lshared
或者:
gcc main.c -Wl,-rpath /home/charles/tmp -g -o main -lshared
最后,总结一下,共享库的搜索顺序(按照优先次序):
1) LD_LIBRARY_PATH指定的目录
2) rpath指定的路径。
rpath指定的路径同时被写进了二进制文件里面。
p$ readelf -d main | grep rpath
0x0000000f (RPATH) Library rpath: [/home/charles/tmp]
3)系统标准路径
这包括/lib, /usr/lib, /usr/local/lib以及在/etc/ld.conf 里面指定的路径。
-
GCC
+关注
关注
0文章
111浏览量
25513 -
搜索
+关注
关注
0文章
70浏览量
16842 -
虚拟机
+关注
关注
1文章
966浏览量
29467
发布评论请先 登录
什么是虚拟机?虚拟机真的那么好用吗?

创建ubuntu虚拟机
VMware虚拟机与主机共享文件的方法
VMware虚拟机与主机共享文件的方法步骤
如何创建虚拟机?
在VM2008R2中使用模板快速创建虚拟机
windows 与虚拟机共享设置手册.pdf
如何使用windows10远程连接虚拟机桌面
虚拟机ubuntu怎么联网
虚拟化数据恢复—虚拟机误还原快照的数据恢复案例
服务器数据恢复—EMC Isilon存储中虚拟机数据恢复案例

评论