在C ++中使用标准库时链接器错误

时间:2013-04-13 12:05:25

标签: c++ gcc linker g++

我一直在努力解决这个编译问题几个小时,但我找不到任何解决方案:

我正在开发一个用“C with classes”风格编写并使用cmake的中型应用程序。我正在尝试将std::multimap添加到我要扩展的部分。我已在相应的头文件中包含<map><utility>,此代码是我的最小示例:

std::pair<int,int> y(5,10);
cout << y.first << ", " << y.second << endl;

std::map<int,int> x;
//x.insert(y);
//x[2] = 4;
cout << x.empty() << endl;

除非我启用任何一个注释行,否则这会按预期工作,在这种情况下,我会从链接器中收到以下错误:

In function `std::_Rb_tree<int, std::pair<int const, int>, std::_Select1st<std::pair<int const, int> >, std::less<int>, std::allocator<std::pair<int const, int> > >::_M_insert_(std::_Rb_tree_node_base const*, std::_Rb_tree_node_base const*, std::pair<int const, int> const&)':
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_tree.h:981: undefined reference to `std::_Rb_tree_insert_and_rebalance(int, std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)'
collect2: error: ld returned 1 exit status

我尝试过的事情

  • 一些研究指出这与libc ++ vs libstdc ++有关,但我认为不是这样,因为删除insert()确实有效。 (我也非常理解这种区别)
  • 上述代码在独立程序中运行良好,使用g++(无选项)或gcc -lstdc++进行编译。
  • 我尝试将-lstdc++添加到cmake CMAKE_CXX_FLAGS,但这似乎没有任何区别。
  • 在CMakeLists.txt中设置set(CMAKE_CXX_COMPILER "g++")似乎没有任何区别。

这一定与我想的库或项目设置有关,但我非常感谢有关从哪里开始寻找的建议。

0 个答案:

没有答案