我有一个带有弱符号的二进制文件,我希望它能够在运行时与依赖于运行的共享库链接。
$nm testrun
...
w basic2.test
...
我的第一个测试是在静态链接时使用.o
文件,但是我需要它才能共享。
所以,我的第二个测试是获取一个定义了该符号的共享库,并在编译时将其与-lmy
(libmy.so)链接起来,这实际上也是有用的。
第三步尝试不在编译时链接并使用ld_preload技巧,但这不起作用。
nm libmy.so
...
00000550 T basic2.test
...
我真的不知道为什么这个特殊的不起作用,看起来像动态加载器应该有足够的信息来设置与libmy.so中的一个testruns弱符号。
我的最终目标,我想需要更多的工作是在开始时加载一个小函数,用dlsym检查适当的符号并将其设置在那里。
任何提示?
答案 0 :(得分:2)
您可能需要使用LD_DYNAMIC_WEAK
以及page人LD_PRELOAD
中的-lmylib.so
:
LD_DYNAMIC_WEAK(自2.1.91以来的glibc)允许覆盖弱符号(恢复旧的glibc行为)。出于安全原因,由于glibc 2.3.4,因为set-user-ID / set-group-ID二进制文件忽略了LD_DYNAMIC_WEAK。
注意:它可能是拼写错误,但您应该使用-Lmylib.so
而不是{{1}}