我需要链接什么库才能在 clang++ 中使用 std::list
What library do I need to link to use std::list in clang++?
我正在尝试在C++中使用std::list
类,我需要使用clang++
来编译程序。 g++ 编译以下程序很好,但我无法弄清楚如何使用 clang++ 编译/链接它:
#include <iostream>
#include <list>
int main(){
std::list<int> L;
L.push_back(10);
std::cout << L.back() << std::endl;
return 0;
}
我已经尝试clang++ -lstdc++ listTest.cpp
但仍然收到以下错误:
/tmp/listTest-3175a9.o: In function `std::list<int, std::allocator<int> >::_M_insert(std::_List_iterator<int>, int const&)':
listTest.cpp:(.text._ZNSt4listIiSaIiEE9_M_insertESt14_List_iteratorIiERKi[_ZNSt4listIiSaIiEE9_M_insertESt14_List_iteratorIiERKi]+0x31): undefined reference to `std::__detail::_List_node_base::_M_hook(std::__detail::_List_node_base*)'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
叮当版:
clang version 3.4 (tags/RELEASE_34/final)
Linux版本:
LSB_VERSION=base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Red Hat Enterprise Linux Server release 6.5 (Santiago)
您应该在使用它们的翻译单元之后提供库参数:
clang++ listTest.cpp -lstdc++
我应该指出,我无法重现您的问题,但这很容易归结为版本/配置的差异(特别是默认情况下选择使用的 stdlib 实现)。
我在我的上面解决了它(redhat,clang 3.4,gcc 4.7.2)。
默认情况下,此项目与/usr/lib/libstdc++
链接。 我有一个单独的位置安装了 gcc 4.7.2 的版本;当我在链接步骤中添加类似于以下内容的行时,它工作正常
-L${GCC_PATH}/lib -Wl,-R${GCC_PATH}/lib
。前提是它们出现在链接步骤中,在 /usr/lib
的类似语句之前。
编辑
您可以使用strace
来帮助诊断此问题;我做了如下操作:
// copy the link step into a temp shell script
strace -f ./temp.sh |& grep -P 'lib(std)?c++'
。这时我意识到我可能需要一个不同的 C++ 运行时版本,因为我看到它正在查找并链接到 /usr/lib
中的那个。
相关文章:
- 为什么 Clang std::ostream 写一个 std::istream 无法读取的双精度?
- 没有'str'成员在 GCC 和 Clang 'std::basic_ostream<char>',但 MSVC 没有问题
- clang C++17 std::vector over align type 使用 -mavx 编译时元素 SIGSE
- 为什么 Clang 在命名空间'std'中没有名为 'copy' 的成员给出错误
- std::value templated 方法的函数使用 clang 和 g++ 进行编译,但不使用 msvc 进行编译
- CLang:在 std::thread 中运行函数会导致结构创建BAD_ACCESS
- clang编译的程序在std::any_cast期间抛出std::bad_any_cast
- std::to_chars在MacOS/clang上编译但不链接
- 带有引用的std::tuple在clang中编译失败,但在gcc中编译失败
- 为什么 std::swap 不适用于<bool> Clang/Win(英语:Clang/Win)下的矢量元素?
- 带有 CMake 的 Clang++-6.0 无法识别 std::string_view
- C++17 std::variant header file (clang 6.0.0)
- Clang, std::next, libstdc++ and constexpr-ness
- C 建造者Clang STD :: Sill,找不到超载的操作员&lt;
- Clang std::isspace 编译错误
- clang, std::function and -fno-rtti
- 有什么区别?clang++|clang-std=c++11
- Clang, std::shared_ptr and std::less/operator<
- 简单的 std::regex_search() 代码无法使用 Apple clang++ -std=c++14 编译
- GCC 或 Clang '-std=' 是否有任何"moving target"别名值,表示"use the latest standard"?