[英]Cannot find symbol which is defined in another dynamic library
我編寫了一個程序(通過dlopen
)加載a.so
,並且在a.so
內a.so
dlopen
b.so
b.so
使用在a.so
實現的一些功能。 我在運行時收到此錯誤:
symbol lookup error, undefined symbol
在nm a.so
,我得到了這個未定義的符號,類型為“ T”。 有人可以幫忙嗎?
您可以在dlopen a.so時使用RTLD_GLOBAL標志,然后a.so定義的符號將可用於后續加載的庫的符號解析。
當使用dlopen()
動態加載b.so
,它將不會注意到調用程序可執行文件(或您的共享對象)中的符號。 因此,您將收到“未定義符號”錯誤。 調用層次結構在這里很重要,一旦加載,它就不會成為所有符號的大池。
為了做到實現這一功能,你可以定義在兩個功能b.so
,一個在a.so
:
然后,在a.so
您將擁有一個包裝該未定義符號的函數,我們將此函數稱為wrapper()
。 然后在a.so
您將:
b.so
b.so
調用register函數, b.so
其作為參數wrapper()
(在a.so
定義),因為它需要回調。 b.so
執行第二個函數, b.so
將調用wrapper()
。 然后,您首先獲得了所需的內容-執行wrapper()
,而無需從b.so
調用a.so
定義的函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.