1
我在linux可執行 - exe
的dlopen()。所以,沒有找到符號在剝離可執行
該可執行文件中有一些功能,即在整個代碼中使用:
sendMsg
debugPrint
那麼我想動態加載.so
,可提供額外的功能ity到我的可執行文件。
在此共享庫中,我包含了sendMsg
和debugPrint
的標頭。
我使用dlopen()
加載這個共享庫並使用dlsym()
創建一個API。
但是,在dlopen()
我使用RTLD_NOW
在加載時解析所有符號。
它失敗,說明它找不到sendMsg
符號。
此符號必須在可執行文件中,因爲sendMsg.c
在那裏編譯。
但是,我的可執行文件被make
進程剝離。因此,dlopen
找不到符號是有意義的。
我該如何解決這種情況?
- 我可以建立共享的功能集成到一個靜態庫和靜態庫鏈接到兩個
exe
和.so
。這將增加代碼尺寸:( - 我可以刪除
exe
這樣的符號,可以發現 - 做一些編譯時鏈接的魔法,我不知道這樣的
.so
知道哪裏的符號是exe
的剝離
http://stackoverflow.com/questions/480617/dlopen-issue 二手動態,這是平臺無關的。 感謝雖然,第一次動態鏈接在Linux上。 – 2011-05-25 09:25:32