首页 > 其他分享 >虚拟机:GCC共享库在连接时的搜索位置和优选次序

虚拟机:GCC共享库在连接时的搜索位置和优选次序

时间:2024-07-29 21:50:34浏览次数:9  
标签:tmp GCC 虚拟机 charles 次序 home 共享 main rpath

假设有两个相同的共享库,一个在标准的共享库搜索目录(/lib/i386-linux-gnu), 一个在非标准目录(/home/charles/tmp):

虚拟机:GCC共享库在连接时的搜索位置和优选次序

在/home/charles/tmp下有个测试程序main.c, 调用共享库里的函数。

用如下的命令编译:

用ldd看一下link的共享库:

虚拟机:GCC共享库在连接时的搜索位置和优选次序

可以看出,虽然我们指定了 要使用 /home/charles/tmp下的库,但实际上用的还是标准搜索路径下的库。

换句话说,GNU ld 优选搜索标准路径下的文件,然后才是 -L指定的

现在执行

export LD_LIBRARY_PATH=/home/charles/tmp

虚拟机:GCC共享库在连接时的搜索位置和优选次序

可见, 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

虚拟机:GCC共享库在连接时的搜索位置和优选次序

最后,总结一下,共享库的搜索顺序(按照优先次序):

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 https://www.jiwenlaw.com/里面指定的路径。

 

 

标签:tmp,GCC,虚拟机,charles,次序,home,共享,main,rpath
From: https://www.cnblogs.com/77cxw/p/18331160

相关文章

  • 【新手|非常简单】VMWare在NAT模式下为Centos7虚拟机配置静态IP
    检查VMWare的网络设置点击VMWare菜单栏中的“编辑”,点击“虚拟网络编辑器”检查一下NAT模式那一条,和我这里的设置是不是一样的(IP可能会不一样),我这里的设置是默认设置。如果不确定,可以点击“还原默认设置”。(你也可以尝试按着截图中的设置调)检查虚拟机的网络连接右键虚拟机,......
  • 多队列网卡-虚拟机Linux系统设置
    多队列网卡安装作者使用的是ubuntu20.04,VMWARE首先查看系统上的网卡ipa#查看网卡信息查看ens33是否支持多队列网卡,如果是下图这种情况就是不支持多队列网卡。cat/proc/interrupts|grepens33#proc是linux虚拟文件系统关闭虚拟机,添加多个网卡修改VMWAE......
  • 怎么在虚拟机跑PCDN项目教程
    Windows启用Hyper-V​Hyper-V是微软推出的免费的虚拟化服务,从Windows8开始,其企业版.专业版.教育版系统都可以免费开启Hyper-V服务。注意:家庭版系统不支持Hyper-V,需要升级为专业版。注意:如果已经开启过Hyper-V,请跳过本步骤。下边我们以Win10为例,开启Hyper-V服务。​方法......
  • Linux(虚拟机)的介绍
    Linux介绍常见的操作系统Windows:微软公司开发的一款桌面操作系统(闭源系统)。版本有dos,win98,winNT,winXP,win7,winvista.win8,win10,win11。服务器操作系统:winserver2003,winserver8,winserver2012Mac:苹果公司开发的一款系统(闭源系统),界面风格很不错。对于系统底层的优......
  • 虚拟机win10无法联网
    虚拟机win10无法联网由于很多工具在宿主机中会被windowsdefender以及火绒等杀毒软件杀掉,所以专门装了个win10虚拟机用来装安全相关的软件,结果离开学校突然发现又不能联网了排查了一番后发现是DNS的错误于是把宿主机的DNS改了一下,发现没用,这个时候突然想到,之前自己好像是把虚......
  • 一觉醒来,虚拟机的IP变了【解决】
    为了模拟服务器,我使用了虚拟机来连接我的后端程序。配置了很多信息,就比如我的虚拟机ip。但是一觉醒,来再次启动发现虚拟机的ip变了!!!于是,我查阅了相关资料......解决办法1修改配置文件vim/etc/sysconfig/network-scripts/ifcfg-ens33TYPE=EthernetPROXY_METHOD=noneBR......
  • 虚拟机安装Docker
    1.卸载旧版首先如果系统中已经存在旧的Docker,则先卸载:yumremovedocker\docker-client\docker-client-latest\docker-common\docker-latest\docker-latest-logrotate\docker-logrotate\docker-engine\docker-selinux2.配......
  • 创建 Java 虚拟机JVM中的参数说明
    1、上一篇创建虚拟机的代码加参数备注varOptions:array[0..4]ofJavaVMOption;VM_args:JavaVMInitArgs;ErrCode:Integer;begin{创建Java虚拟机}FJavaVM:=TJavaVM.Create(JNI_VERSION_1_8);//这个选项设置Java类路径,指定JVM应该在哪里......
  • VMware Fusion Pro 虚拟机 免费了附最新版 13.5.2-23775688 下载地址
    VMwareFusionPro可以帮助用户在Mac上安装Windows、Linux等多种操作系统,最重要的是无需重启电脑切换系统,可以和MacOS系统同时运行,就类似于MacOS安装了一个应用。对于家庭用户来说足够简单,对于IT专业人员,开发人员和企业来说足够强大。VMwareFusionPro是一款强大的......
  • Parallels对Mac的损害大吗 pd虚拟机怎么设置内存和CPU 运行Parallels发热
    Parallels是一家专注于虚拟化软件开发的公司,其旗舰产品ParallelsDesktopforMac为Mac用户带来了运行非原生操作系统的无缝体验。然而,或许有人会忧心使用ParallelsDesktop会给Mac系统带来潜在的损害。下面咱们就对这一问题展开深入探究,并给出应对之策。Parallels......