我有一個加載.so
插件的可執行文件。動態加載:共享靜態庫中的未定義符號
可執行文件與-rdynamic
鏈接,以便可能發生符號回調。
我有一個包含在可執行文件中的靜態庫。這在.a
中有一個叫做BLAH_hello()
的功能。在可執行文件中不使用靜態庫。即在可執行代碼中沒有對BLAH_hello()
的調用。
但是,.so
確實呼叫BLAH_hello()
。
當我dlopen()
的.so
它抱怨未定義符號的BLAH_hello()
如果我包括在可執行代碼BLAH_hello()
僞呼叫,像BLAH_hello(NULL);
。該符號包含在可執行文件中,並且當加載.so
時,它會找到該符號。
我敢肯定,我也可以鏈接.so
對.a
但多個動態加載.so
的使用BLAH_hello
調用,這樣是有意義的有它的可執行文件。如果我將庫鏈接到每個.so
,我也擔心符號衝突。
所以我想知道的是,如何將.a
的符號放到可執行文件中,即使它們實際上不是在可執行文件中使用了?
將.so與.a鏈接是明顯而正確的事情。 – 2011-05-26 08:23:00
謝謝尼爾。我有三個需要與'.a'鏈接的'.so'插件當我將所有'.so'加載到我的可執行文件中時,我不會遇到符號衝突? – 2011-05-26 17:40:30
不,您不會,否則您將無法在.sos中使用操作系統和其他標準功能。 – 2011-05-26 18:17:10