2012-11-21 89 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,我想我需要一個新的策略。 :) –