2016-03-11 61 views
1

爲什麼我有這些鏈接錯誤?鏈接錯誤stdC++

這裏是鏈接錯誤的短樣本,有數百個類似:

/tmp/main-NtNkRQ.o:在功能__cxx_global_var_init': /home/go/NetBeansProjects/Arbete_216/Ajourwork/Components/TheRealDeal/GUI/../../../Components/TheRealDeal/GUI/main.cpp:(.text+0x10): undefined reference to的std ::的ios_base ::初始化::初始化()」 /home/go/NetBeansProjects/Arbete_216/Ajourwork/Components/TheRealDeal/GUI/../../../Components/TheRealDeal/GUI/main.cpp:(.text+0x17): undefined reference to std::ios_base::Init::~Init()' /tmp/main-NtNkRQ.o: In function main' : /home/go/NetBeansProjects/Arbete_216/Ajourwork/Components/TheRealDeal/GUI/../../../Components/TheRealDeal/GUI/main.cpp:123: undefined reference to __cxa_begin_catch' /home/go/NetBeansProjects/Arbete_216/Ajourwork/Components/TheRealDeal/GUI/../../../Components/TheRealDeal/GUI/main.cpp:127: undefined reference to __cxa_end_catch' /home/go/NetBeansProjects/Arbete_216/Ajourwork/Components/TheRealDeal/GUI/../../../Components/TheRealDeal/GUI/main.cpp:127: 未定義的參考__cxa_end_catch' /home/go/NetBeansProjects/Arbete_216/Ajourwork/Components/TheRealDeal/GUI/../../../Components/TheRealDeal/GUI/main.cpp:123: undefined reference to std :: terminate() ' /tmp/main-NtNkRQ.o:(.data.rel.ro._ZTI26go_s_module_init_exception[_ZTI26go_s_module_init_exception]+0x0): 未定義參考vtable for __cxxabiv1::__class_type_info' /tmp/main-NtNkRQ.o:(.data.DW.ref.__gxx_personality_v0[DW.ref.__gxx_personality_v0]+0x0): undefined reference to __gxx_personality_v0' /家/去/的NetBeansProjects/Arbete_216/Ajourwork /組件/ TheRealDeal/GUI/linuxobj // GO_C_Align.o: 在功能GO_C_Align': /home/go/NetBeansProjects/Arbete_216/Ajourwork/Utilities/Image/Align/GO_C_Align.cpp:35: undefined reference to的std ::終止()」 /home/go/NetBeansProjects/Arbete_216/Ajourwork/Components/TheRealDeal/GUI/linuxobj//GO_C_Align.o: 在功能~GO_C_Align': /home/go/NetBeansProjects/Arbete_216/Ajourwork/Utilities/Image/Align/GO_C_Align.cpp:44: undefined reference to性病:: terminate()' /home/go/NetBeansProjects/Arbete_216/Ajourwork/Components/TheRealDeal/GUI/linuxobj // GO_C_Align.o: 在功能GO_C_Align::de_init()': /home/go/NetBeansProjects/Arbete_216/Ajourwork/Utilities/Image/Align/GO_C_Align.cpp:187: undefined reference to的operator delete」 /home/go/NetBeansProjects/Arbete_216/Ajourwork/Components/TheRealDeal/GUI/linuxobj//GO_C_Align.o: 在功能GO_C_Align::init(int, int, GO_C_BufferManager*)': /home/go/NetBeansProjects/Arbete_216/Ajourwork/Utilities/Image/Align/GO_C_Align.cpp:121: undefined reference to運營商新的[ ](無符號長)'

我在Debian 7上,使用Clang編譯器。該代碼是使用makefile系統內置,下面的編譯器標誌是用來

CXXFLAGS = -g -I /opt/intel/composer_xe_2015.1.133/ipp/include/ -Wno-deprecated -D_GNU_SOURCE -D_REENTRANT -D__STDC_CONSTANT_MACROS -I/usr/include/postgresql/ -I/usr/local/Qt/5.2.1/gcc_64/include/QtX11Extras/ -I/usr/local/Qt/5.2.1/gcc_64/include/QtWidgets/ -I/usr/local/Qt/5.2.1/gcc_64/include/ -I/usr/local/Qt/5.2.1/gcc_64/include/QtGui/ -fPIC -fPIE -I/home/go/ffmpeg_build/include/ -I/usr/local/Qt/5.2.1/gcc_64/include/QtCore/ -fPIC -fPIE -I/home/go/ffmpeg_build/include/libavcodec -I/home/go/ffmpeg_build/include/libavformat/ 


$(CXX) -o xxx_GUI $(MAIN_FILE) $(TARGETROOT)/*.o $(TARGETROOT)/*.a $(DEFINE_FLAGS) $(INCLUDE_FLAGS) $(CXXFLAGS) -lpq -lippi -lipps -lippcore -lpthread -lgcrypt -lippvm -lippcv -lippcc -L/opt/intel/composer_xe_2015.1.133/ipp/lib/intel64 -L/usr/local/Qt/5.2.1/gcc_64/include/QtWidgets/ -L/usr/X11R6/lib/ -lXv -lX11 -lXext -ltar 

如果我添加-lstdC++到我的編譯器選項,FFmpeg的給出鏈接錯誤來代替。我已經將FFmpeg包含在extern「C」中,正如我在本網站其他地方看到的那樣。它沒有幫助。但我認爲這不是問題。

FFmpeg從源代碼編譯爲動態庫。 (當我鏈接靜態庫時,我有同樣的行爲。)

我已經檢查了FFdpeg庫與ldd和依賴關係到位。我已經檢查了32/64的混淆,但它應該都是64。

根@ ANTEC:在/ usr/local/lib目錄#文件libavcodec.so.57.27.101 libavcodec.so.57.27.101:ELF 64位LSB的共享對象,X86-64,版本1(SYSV),動態鏈接,BuildID [sha1] = 0x6bf103d9a0531802fdcc608a8032a77d5b89b898,剝離 root @ antec:/ usr/local/lib#file /lib/x86_64-linux-gnu/libc.so.6 /lib/x86_64-linux-gnu/libc。 so.6:符號鏈接到`libc-2.13.so' root @ antec:/ usr/local/lib#file /lib/x86_64-linux-gnu/libc-2.13.so /lib/x86_64-linux-gnu /libc-2.13.so:用於GNU/Linux 2.6.26的ELF 64位LSB共享對象x86-64版本1(SYSV),動態鏈接(使用共享庫),BuildID [sha1] = 0xb5053aa2420700afc9687ab357a8d5d89fcb1bd0,摘除

包含在FFmpeg源碼中的例子編譯並鏈接正常。

是否有任何其他外部部件可能會出現這些錯誤? C++ 11?任何跡象都可能有幫助謝謝。

回答

1

您可能使用clang作爲變量CXX的值。相反,您應該使用clang++,因爲clang前端不會隱式鏈接到C++標準庫。

+0

go @ antec:〜$ echo $ CXX 鐺++ –

+1

無論環境變量如何,您都應該驗證用於編譯的實際命令行是否正確,因爲makefile可能會錯誤地設置'CXX'。其實我認爲你應該在問題中說明用於編譯的完整命令行,而不僅僅是makefile規則。 – jotik

+0

你說得對。似乎Netbeans將CXX設置爲叮噹聲。沒有幫助那個鏗鏘聲++在項目屬性 - >工具集合管理器中被指定爲C++編譯器。 –

0

也許您應該將.so或.a的路徑添加到您的項目中,而不是將其複製到項目文件夾中。

+0

對不起,但我不明白你的意思。你能否詳細說明一下? –

+0

也許是這樣的:LIBS + = your_path/libsupC++。a –