2014-11-24 94 views
0

我正在編譯我自己的使用其他(外部).so庫的.so庫。我創建了我自己的CMakeLists.txt。對於外部庫,我使用提供的CMakeList.txt並將其添加到我的CMakeLists.txt(add_subdirectory)中的項目中。我被連接卡住了。我的圖書館無法加載外部模塊。加載外部共享庫時g ++鏈接問題

它說

未定義的符號:_Z13SomeFunctionhhhiiiPchhddhhhS_h

當我檢查外部的.so模塊符號,我發現

_Z13SomeFunctionbbbiiiPcbbddbbbS_b

因此,符號呈現的.so模塊中,但名稱不匹配。

任何幫助?

+0

'extern「C」'應該有幫助。參見[Name mangling](http://en.wikipedia.org/wiki/Name_mangling) – Drop 2014-11-24 11:46:51

+0

http://stackoverflow.com/a/12574420/560648 – 2014-11-24 11:56:00

回答

-1

我認爲編譯器找不到.so模塊。 您可能必須使用這些標誌-L和-l進行編譯。 如果您的LIB被稱爲libmy.so你將不得不使用:g++ *.c -L path/to/libmy/ -lmy

編輯

外部lib.so路徑必須在LD_PRELOAD環境變量,檢查此則。

+0

我在ldd mylib.so中看到正確的路徑。 – user1085593 2014-11-24 11:46:10

+0

當您嘗試編譯自己的.so時會發生該問題嗎? – 2014-11-24 11:48:00

+0

檢查您的.so模塊中的其他外部.so模塊的調用是否正確,檢查每個函數的名稱並檢查是否未命中在鏈接器中鍵入.so名稱模塊 – 2014-11-24 11:50:01