2014-12-04 57 views
0

這裏是我的問題:未定義的符號鏈接到動態庫

在運行時,我的計劃,負載共享庫加載失敗之一,它說:

libCommunicationModule.so: undefined symbol __builtin_delete 

背景:

  • 編譯器:GCC 3.4
  • 的Debian的Linux 4.0(舊的東西....)

我有一個靜態庫:libtgi_cppd.a,我沒有這個庫的來源。 這LIB鏈接到共享庫libCommunicationModule.so這些選項 -Wl,-whole-archive -ltgi_cppd

我啓用了__builtin_delete-y選項檢查:

libtgi_cppd.a(ClientAPI_cpp.o): reference to __builtin_delete 
libtgi_cppd.a(ClientInterface.o): reference to __builtin_delete 
libtgi_cppd.a(ClientAPI_cpp.o): reference to __builtin_delete 

我嘗試添加前後的鏈接命令-lstdc++ -lgcc-whole-archive,沒有變化。

$ nm libCommunicationModule.so | grep __builtin 

結果總是這樣:

 U __builtin_delete 
    U __builtin_new 
    U __builtin_vec_new 

我能做些什麼來解決這個問題?

謝謝

全部命令,該電源線:

g++ -Wl,-y -Wl,__builtin_delete -Wl,--trace -Wl,-rpath,/usr/local/qt/lib -shared 
-Wl,-soname,libCommunicationModule-x11-Debug.so.6 -Wl,-rpath,/home/sncf/AGC_IHM/AGC/Tms/Gui/Components/CommunicationModule/x11/Debug 
-o libCommunicationModule-x11-Debug.so.6.0.1 x11/Debug/Obj/CommunicationModule-Build.o x11/Debug/Obj/CommunicationModuleFilesAutoGen.o x11/Debug/Obj/CommunicationModuleParamsAutoGen.o 
x11/Debug/Obj/CommunicationModule.o 
x11/Debug/Obj/CommunicationModuleAutoGen.o 
x11/Debug/Obj/CommDebugDlg.o 
x11/Debug/Obj/moc_CommunicationModule.o x11/Debug/Obj/moc_CommDebugDlg.o 
-L/usr/local/qt/lib 
-L/usr/X11R6/lib -lBuildInformations-x11-Debug 
-lBagsLib-x11-Debug -lConfigParamsLib-x11-Debug 
-lIniLib-x11-Debug -lModuleHandling-x11-Debug 
-lGenericRuntimeInfoLib-x11-Debug 
-lDebugLib-x11-Debug -lTCNLib-x11-Debug 
-lGUITools-x11-Debug -lQtEventsLib-x11-Debug 
-lPackUnpack-x11-Debug -L/home/sncf/AGC_IHM/AGC/Tms/Gui/ProjectLib/x11 
-L/home/sncf/AGC_IHM/AGC/Tms/Gui/Components/AGCTCNClientAPI/2004.09.21/posix_linux_i586/lib 
-lqt-mt -lXext -lX11 -lm -lpthread -Wl,-whole-archive -ltgi_cppd -lstdc++ -lgcc 
+0

我只是LDD檢查,一切都很好,它訪問這兩個系統庫和特定的應用程序庫和權限很好。 – hch 2014-12-04 12:21:24

+0

@dgrat看nm結果,我看到靜態lib是gcc2_compiled(所以肯定2.95)。我檢查了可以做什麼兼容性。 – hch 2014-12-04 12:35:27

+0

顯示您的鏈接命令和所有其他相關命令的全部內容,並且所有選項和參數和標記都是未經編輯的,並且請確保您從頭到尾複製它們,而不會忽略其中的任何內容。 – 2014-12-04 12:42:08

回答

0

你鏈接的是由其他編譯器/連接器版本連接該編譯庫/。你所需要的是鏈接到一個由你自己使用的編譯器/鏈接器編譯和鏈接的庫,或者你必須確保這些庫至少是二進制兼容的。

0
  1. 執行命令LDD,它會列出你的程序中使用的所有共享庫。

  2. 檢查執行環境中的環境變量LIBPATH/LD_PATH。並確保所有的圖書館都存在於這條道路

  3. 確保所有的庫文件有足夠的權限
相關問題