我正在尝试在 ubuntu 下使用 clang 与 boost 链接。我收到以下错误:
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libboost_filesystem.a(operations.o): undefined reference to symbol '_ZNSs4_Rep10_M_destroyERKSaIcE@@GLIBCXX_3.4'
/usr/lib/x86_64-linux-gnu/libstdc++.so.6: error adding symbols: DSO missing from command line
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我已将 find_package(Boost COMPONENTS file_system, system) 添加到 cmake 中。知道什么可能导致此错误吗?
这个错误是因为 Boost 是使用 gcc 标准库 libstdc++ 构建的,而我是使用 clang libc++ 编译的。
之前我使用的是通过 apt-get 下载的 Boost。从 boost.org 下载源代码并使用 clang 及其标准库手动编译解决了这个问题。
我最近遇到了这个问题,我认为在很多情况下更好的解决方案可能是使用 clang++ 来代替。
如果这是不可能的,我可以通过直接显式链接 std c++ 库来解决该问题。
例如:
clang -lstd=c++17 main.cpp -lstdc++