簡體   English   中英

對std :: bad_cast :: bad_cast()的未定義引用

[英]Undefined reference to std::bad_cast::bad_cast()

我在Linux上使用cake和clang ++。 我遇到了一些鏈接器問題:

Linking CXX executable "/run/media/toi/Storage E/Dropbox/Programmering/Flictus/bin/main"
CMakeFiles/main.dir/GraphicsEngine/Shader.cpp.o:/run/media/toi/Storage E/Dropbox/Programmering/Flictus/src/GraphicsEngine/Shader.cpp:function std::__1::basic_filebuf<char, std::__1::char_traits<char> >::seekoff(long long, std::__1::ios_base::seekdir, unsigned int): error: undefined reference to 'std::bad_cast::bad_cast()'
CMakeFiles/main.dir/GraphicsEngine/Shader.cpp.o:/run/media/toi/Storage E/Dropbox/Programmering/Flictus/src/GraphicsEngine/Shader.cpp:function std::__1::basic_filebuf<char, std::__1::char_traits<char> >::sync(): error: undefined reference to 'std::bad_cast::bad_cast()'
CMakeFiles/main.dir/GraphicsEngine/Shader.cpp.o:/run/media/toi/Storage E/Dropbox/Programmering/Flictus/src/GraphicsEngine/Shader.cpp:function std::__1::basic_filebuf<char, std::__1::char_traits<char> >::underflow(): error: undefined reference to 'std::bad_cast::bad_cast()'
CMakeFiles/main.dir/GraphicsEngine/Shader.cpp.o:/run/media/toi/Storage E/Dropbox/Programmering/Flictus/src/GraphicsEngine/Shader.cpp:function std::__1::basic_filebuf<char, std::__1::char_traits<char> >::overflow(int): error: undefined reference to 'std::bad_cast::bad_cast()'

我假設這確實是一個鏈接器問題,因為它是在鏈接開始並包含相關標頭之后發生的。

我沒有在std::cout等上得到未定義的引用。

生成鏈接器錯誤的代碼:

std::ifstream file(shaderFile, std::ios::in | std::ios::binary);
if (file) {
    file.seekg(0, std::ios::end);
    shaderString.resize(file.tellg());
    file.seekg(0, std::ios::beg);
    file.read(&shaderString[0], shaderString.size());
    file.close();
}

在添加上述代碼之前,項目運行良好。 它可以在Visual Studio 2013中正常運行。

cmake文件的相關部分:

add_compile_options(-stdlib=libc++)
add_compile_options(-std=c++1y)
set(CMAKE_LINKER /usr/bin/clang++) # didn't help when added
set(CMAKE_EXE_LINKER_FLAGS "-lc++ -Wall -fexceptions")
set(CMAKE_CXX_COMPILER /usr/bin/clang++)
set(CMAKE_C_COMPILER /usr/bin/clang)

那么,還有更多我應該鏈接的東西嗎?還是clang ++中的限制?

編輯:鏈接器調用:

"/usr/bin/ld.gold" -export-dynamic --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o 
/run/media/toi/Storage E/Dropbox/Programmering/Flictus/bin/main /usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/4.8.2/../../../../lib64/crt1.o /usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/4.8.2/../../../../lib64/crti.o 
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/4.8.2/crtbegin.o -L/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/4.8.2 -L/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/4.8.2/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/4.8.2/../../.. -L/lib
 -L/usr/lib CMakeFiles/main.dir/main.cpp.o CMakeFiles/main.dir/GraphicsEngine/GraphicsEngine.cpp.o CMakeFiles/main.dir/GraphicsEngine/Shader.cpp.o 
CMakeFiles/main.dir/GraphicsEngine/TextureLoader.cpp.o CMakeFiles/main.dir/Input/Gamepad.cpp.o CMakeFiles/main.dir/Input/Input.cpp.o CMakeFiles/main.dir/GUI/Font.cpp.o CMakeFiles/main.dir/GUI/GUIEngine.cpp.o 
CMakeFiles/main.dir/GUI/GUIRect.cpp.o CMakeFiles/main.dir/GUI/GUISprite.cpp.o CMakeFiles/main.dir/GUI/Objects/Components/GUIText.cpp.o CMakeFiles/main.dir/GUI/Objects/GUIButton.cpp.o 
CMakeFiles/main.dir/GUI/Objects/GUIImage.cpp.o CMakeFiles/main.dir/GUI/Objects/GUILabel.cpp.o CMakeFiles/main.dir/GUI/Objects/GUIListBox.cpp.o 
CMakeFiles/main.dir/GUI/Objects/GUIObject.cpp.o -lSDL2 -lpthread -lGLEW -lGL -lSOIL -lc++ -lfreetype -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/4.8.2/crtend.o /usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/4.8.2/../../../../lib64/crtn.o

這是通過與libc++abi鏈接解決的。

如果尚未這樣做,請嘗試使用前綴g ++而不是gcc EX編譯代碼:

g++ (file name) :  gcc (file name)

第一個是正確的。

這樣做的原因是因為使用g ++前綴允許運行不同的代碼庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM