4

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

在我看来,ld-linux.so位置在可执行文件中是硬编码的(调用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.soat /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2(它也作为符号链接存在于我的发行版中)。

4

2 回答 2

7

尝试添加-Wl,--dynamic-linker=/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2到您的LDFLAGS.

于 2013-02-05T14:06:48.613 回答
1

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

于 2019-02-23T09:31:54.030 回答