我发现要加载库,可执行文件首先打开/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.so
上查找/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
我的可执行文件(它也作为符号链接出现在我的发行版中)。
尝试将-Wl,--dynamic-linker=/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
添加到您的LDFLAGS
。
patchelf可用于更改ld-linux解释器的路径。