簡體   English   中英

c ++ - 如何解釋'重復符號'錯誤中的符號?

[英]c++ - How to interpret symbols in 'duplicated symbols' error?

我正在研究一個c ++程序。

由於幾個文件相互依賴,我一次性實現它們然后編譯錯誤。

以下是這些錯誤消息:

duplicate symbol __ZN5RendrlsERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEERNS_8Vector3DE in:
    CMakeFiles/Rendr.dir/src/main.cpp.o
    CMakeFiles/Rendr.dir/src/ray_tracer.cpp.o
duplicate symbol __ZN5RendrlsERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEERKNS_8Vector2DE in:
    CMakeFiles/Rendr.dir/src/main.cpp.o
    CMakeFiles/Rendr.dir/src/ray_tracer.cpp.o
duplicate symbol __ZN5RendrlsERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEERNS_8Vector3DE in:
    CMakeFiles/Rendr.dir/src/main.cpp.o
    CMakeFiles/Rendr.dir/src/CGL/svgparser.cpp.o
duplicate symbol __ZN5RendrlsERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEERKNS_8Vector2DE in:
    CMakeFiles/Rendr.dir/src/main.cpp.o
    CMakeFiles/Rendr.dir/src/CGL/svgparser.cpp.o
...
duplicate symbol __ZN5RendrlsERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEERKNS_8Vector2DE in:
    CMakeFiles/Rendr.dir/src/main.cpp.o
    CMakeFiles/Rendr.dir/src/CGL/triangulation.cpp.o
ld: 15 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [Rendr] Error 1
make[2]: *** [CMakeFiles/Rendr.dir/all] Error 2
make[1]: *** [CMakeFiles/Rendr.dir/rule] Error 2
make: *** [Rendr] Error 2

我沒有粘貼我的全部代碼,因為我的問題是我無法理解像__ZN5RendrlsERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEERKNS_8Vector2DE這樣的__ZN5RendrlsERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEERKNS_8Vector2DE ,因此我不知道如何找到不正確的代碼片段。

我之前只遇到像_main這樣的符號,它們很容易理解。

我已經定義了Vector3DVector2D類,但是如何解釋錯誤消息中的確切符號? 我認為它們代表了一些功能或變量?

那些是“裝飾”或“受損”的名字。 不同的C ++編譯器對名稱修飾有不同的規則。

您可以使用這個方便的在線工具對它們進行解碼: https//demangler.com/

例如:

__ZN5RendrlsERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEERKNS_8Vector2DE

取消了

_Rendr::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, Rendr::Vector2D const&)

如果你有c++filt可用,你可以在命令行執行:

$ c++filt -_ __ZN5RendrlsERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEERKNS_8Vector2DE`
Rendr::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, Rendr::Vector2D const&)

暫無
暫無

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

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