Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 更改ld linux位置_C++_Linux_Gcc_Shared Libraries_Ld - Fatal编程技术网

C++ 更改ld linux位置

C++ 更改ld linux位置,c++,linux,gcc,shared-libraries,ld,C++,Linux,Gcc,Shared Libraries,Ld,我发现要加载库,可执行文件首先打开/lib/ld-linux-x86-64.so.2。所有关于加载共享库的功能(在多个路径中搜索、使用rpath等)只有在加载ld linux后才能工作,因为正是ld linux实现了这些功能 在我看来,ld linux.solocation是在可执行文件中硬编码的(在我的可执行文件上调用strings加强了这一理论)。我的问题是,在我的linux发行版中,编译器(g++)将ld linux位置设置为/lib/ld-linux-x86-64.so.2。而在Ubun

我发现要加载库,可执行文件首先打开
/lib/ld-linux-x86-64.so.2
。所有关于加载共享库的功能(在多个路径中搜索、使用rpath等)只有在加载
ld linux
后才能工作,因为正是
ld linux
实现了这些功能

在我看来,
ld linux.so
location是在可执行文件中硬编码的(在我的可执行文件上调用
strings
加强了这一理论)。我的问题是,在我的linux发行版中,编译器(g++)将
ld linux
位置设置为
/lib/ld-linux-x86-64.so.2
。而在Ubuntu上(更流行),它位于
/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2


我想知道我是否可以让我的可执行文件查找
ld-linux。因此
/lib/x86\u 64-linux-gnu/ld-linux-x86-64.so.2
(它在我的发行版中也是一个符号链接)。

尝试添加
-Wl,--动态链接器=/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
到您的
LDFLAGS

patchelf可用于更改到ld-linux解释器的路径

是否有可能提供一个相对于二进制文件的路径?我怀疑这是一个好主意,即使它可以工作,因为如果将二进制文件放入错误的目录中,它也不会工作。这正是我试图解决的问题:使用绝对路径,它只在特定位置工作,同时我希望整个二进制文件目录都可以重新定位,也就是说,发送一个zip文件,让用户在他/她想去的任何地方解压。顺便说一句,ld-linux.so与libc6.so结合在一起——必须同时发送或不发送,否则二进制文件会崩溃。因此,为了向后和向前兼容,所有这些都需要发货。这是有用的信息,谢谢!