这是我的问题:
在运行时,加载共享库的程序无法加载一个,它说:
libCommunicationModule.so: undefined symbol __builtin_delete
上下文:
我有一个静态库: libtgi_cppd.a ,我没有这个库的来源。
此lib通过这些选项链接到共享库 libCommunicationModule.so
-Wl,-whole-archive -ltgi_cppd
我在-y
上启用了__builtin_delete
选项来检查:
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 :(得分:1)
您链接到由另一个编译器/链接器版本编译/链接的库。您需要的是链接一个库,该库由您自己使用的相同编译器/链接器编译和链接,或者您必须确保这些库至少是二进制兼容的。
答案 1 :(得分:0)
执行命令ldd,它将列出您的程序使用的所有共享库。
检查执行环境中的环境变量LIBPATH / LD_PATH。并确保所有这些库都存在于该路径中