弱符号,共享库和dlopen

时间:2012-11-21 15:14:28

标签: linux dll linker shared-libraries weak-references

我有一个带有弱符号的二进制文件,我希望它能够在运行时与依赖于运行的共享库链接。

$nm testrun
...         
w basic2.test
...

我的第一个测试是在静态链接时使用.o文件,但是我需要它才能共享。

所以,我的第二个测试是获取一个定义了该符号的共享库,并在编译时将其与-lmy(libmy.so)链接起来,这实际上也是有用的。

第三步尝试不在编译时链接并使用ld_preload技巧,但这不起作用。

nm libmy.so
...
00000550 T basic2.test
...

我真的不知道为什么这个特殊的不起作用,看起来像动态加载器应该有足够的信息来设置与libmy.so中的一个testruns弱符号。

我的最终目标,我想需要更多的工作是在开始时加载一个小函数,用dlsym检查适当的符号并将其设置在那里。

任何提示?

1 个答案:

答案 0 :(得分:2)

您可能需要使用LD_DYNAMIC_WEAK以及pageLD_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}}