2012-11-21 88 views
1

我有一个弱符号的二进制文件,我希望能够在运行时与运行相关的共享库链接。弱符号,共享库和dlopen

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

我的第一个测试是使用.o文件的静态链接时间,即工作,但我需要它来共享。

因此,我的第二个测试是获得一个定义了该符号的共享库,并在编译时将它与-lmy(libmy.so)链接,实际上它也可以工作。

第三步尝试不在编译时链接和使用ld_preload技巧,这没有奏效。

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

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

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

任何提示?

+0

由于多路,那不是我的实际问题,但我发现一个名不匹配,我会更新的问题 –

+0

检查回答。 – iabdalkader

回答

2

看来你可能需要使用LD_DYNAMIC_WEAKLD_PRELOAD沿着从该名男子page

LD_DYNAMIC_WEAK(自2.1.91的glibc)允许弱符号被覆盖(恢复到老的glibc的行为) 。出于安全原因,由于glibc 2.3.4,对于set-user-ID/set-group-ID二进制文件,LD_DYNAMIC_WEAK被忽略。

注:这可能是一个错字,但你应该使用-lmylib.so而不是-Lmylib.so

+1

它并不适合我,但通过查看文档,我发现http://lists.freedesktop.org/archives/xorg/2006-August/017341.html,我想我需要一个新的策略。 :) –