【问题标题】:What library do I need to link to use std::list in clang++?我需要链接什么库才能在 clang++ 中使用 std::list?
【发布时间】:2014-05-11 12:02:38
【问题描述】:

我正在尝试在 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 版本:

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)

【问题讨论】:

  • 顺便说一句 std::list 不是一个类。
  • 不是类是什么意思?
  • 这是一个类模板
  • 你解决过这个问题吗?
  • @BrianVandenberg 我没有在我的特定系统上解决它;似乎clang 可能安装不正确,但我无法控制安装,因此无法修复它。为那个特定项目迁移到 g++,结果还不错。

标签: c++ list linker clang std


【解决方案1】:

您应该在使用它们的翻译单元之后提供库参数:

clang++ listTest.cpp -lstdc++

我应该注意,我无法重现您的问题,但这很容易归结为版本/配置的差异(特别是 w.r.t. 默认情况下选择使用的 stdlib 实现)。

【讨论】:

  • 啊——谢谢。我颠倒了订单,它仍然不起作用,但如果你不能重现这个问题,那么我的猜测是我的系统上的配置有问题。
【解决方案2】:

我自己解决了(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 中的那个。

【讨论】:

  • 嗯——很有趣。我自己似乎无法正确链接到该库,但我会做更多的挖掘工作。
猜你喜欢
  • 2010-12-31
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
  • 1970-01-01
  • 2013-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多