2015-05-26 68 views
1

在C程序中,我想使用dlopen將特定模塊添加爲共享庫。解決共享庫的未定義符號

使用dlopenRTLD_LAZY(使用RTLD_NOW可能直接失敗,因爲以下的原因)和dlsym我可以創建句柄我想要調用的實際功能。調用函數後,出現錯誤

program: symbol lookup error: file.so: undefined symbol: createExpressionNumber 

函數createExpressionNumber是程序的函數。共享庫是由

gcc -fPIC -c ... 

編譯和

gcc -shared ... 

似乎鏈接,作爲共享庫(這是有道理的)鏈接時的符號都沒有解決,但這些符號沒有提供我的程序打開lib時。

有什麼辦法可以將我的程序的功能提供給加載的共享庫,還是我需要從我的程序中提取共享庫使用的所有功能作爲單獨的共享庫?

回答

1

您的主程序鏈接行需要-rdynamic。這將:

Pass the flag -export-dynamic to the ELF linker, on targets that support it. This instructs the linker to add all symbols, not only used ones, to the dynamic symbol table. This option is needed for some uses of "dlopen" or to allow obtaining backtraces from within a program.

即將允許動態加載共享庫來查找主可執行文件的符號。

相關問題