假设有两个相同的共享库,一个在标准的共享库搜索目录(/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 里面指定的路径。
【ESP266高速透传案例】M8266WIFI模块在普通单片机上实现超过兆字节每秒的高速通信,同时内嵌WEB服务器
2018年国内部分自主品牌已实现L2级自动驾驶车的量产
英国大规模引入商业无人机,预计到2023年无人机送货成常习
软银专注于人形机器人科技领域,持续推动人形机器人应用落地
哪款蓝牙耳机音质比较好?音质比较好的四款耳机测评
虚拟机:GCC共享库在连接时的搜索位置和优选次序
!!疯狂/甩卖 CTS60 CTS60 CTS60 数字无
格兰仕智能制造全面落地
电池制造工艺中的疑难问题解决
【模电设计】搞懂模电,先搞懂三极管和MOS管
VR是如何帮助记忆保留的看了就知道
美国科研人员研发有效驱鸟的无人机,现可以在机场成功驱赶12鸟组成的鸟群
马云爸爸大赞90后 淘宝造物节开幕!在这逛了108家店:明天还来
美国科学家发明纳米发电器 手指一滑动通话一星期
华为除了麒麟手机芯片还有很多自研芯片
基于lm358单片机掉电保护电路设计
什么是4G DTU,它从哪里开始是如何发展的
BIS称将立即评估中兴的申诉_中兴迅速解决拒绝令
工业互联网未来将会催生哪些新的商业模式?
基于STM32医疗电子嵌入式实验平台设计