g ++失败了"未定义的引用"标准C ++库的错误

时间:2015-06-28 12:07:25

标签: c++ linux gcc

我已经构建并安装了g ++并在一个简单的" Hello World"上测试了它。程序,它似乎工作。

但是,对于我们较大的代码,编译失败并出现以下错误:

CMakeFiles/gaim_convert.dir/GaimConvert.cpp.o: In function `Output(std::string const&, std::ostream&)':GaimConvert.cpp:(.text._Z6OutputRKSsRSo[_Z6OutputRKSsRSo]+0x12): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& st d::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)'

正常运作的程序是:

#include <iostream>

int main() {
  std::cout << "Hello World!" << std::endl;
  std::cin.get();
  return 0;
}

很明显,C ++标准库的某些部分已正确安装。这不仅仅是一个明显的&#34;没有安装libstdc ++的安装错误。

代码将使用不同版本的编译器进行编译,因此它不是代码。

调试安装的方法是什么,以便删除此错误消息?库路径为LD_LIBRARY_PATH

/tec/mannucci/gccBuild/lib64:/tec/mannucci/gccBuild/lib:/usr/local/gmp510/lib:/usr/local/mpfr311/lib:/usr/local/mpc101/lib:/usr/local/ppl011/lib:/usr/local/cloog0162/lib:/usr/local/lib64:/usr/lib64:...

感谢用户评论,我查看了链接命令,显然存在问题。这可能是个问题。这是链接命令:

/ tec / mannucci / gccBuild / bin / g ++ -fmessage-length = 0 -O3 -DNDEBUG CMakeFiles / gaim_convert.dir / GaimConvert.cpp.o -o gaim_convert -L / usr / lib / gcc / x86_64-redhat- linux / 4.1.2 -rdynamic ../../lib/geometry/libgeometry.a ../../lib/util/libutil.a ../../ctimetrans/libtimetrans.a ../../ libversion.a

请注意&#39; -L&#39;链接到旧版本的gcc。那么问题是如何告诉cmake库的位置。我不知道该怎么做。这就是使用LD_LIBRARY_PATH的重点。我认为这样可以解决这个问题。

在相关的说明中,cmake没有找到$ path中的g ++编译器,但是还原为/ usr / bin / c ++,这让我感到有些不安。然后,我必须编辑CMakeCache.txt文件,以使其使用实际上在路径上的g ++而不是/ usr / bin / c ++。

1 个答案:

答案 0 :(得分:0)

我们能够解决这个问题如下:

1)定义环境变量CC(= gcc)和CCX(= g ++)以指向我们正在使用的gcc编译器。 cmake使用这些环境变量来完成c和c ++编译器。

2)将LD_LIBRARY_PATH设置为gcc和g ++编译器的相应库支持的路径。

3)确保正确的编译器在路径上。

在我们这样做之前,cmake将无法正确配置,编译将失败。

这些步骤似乎适用于在非标准位置构建的编译器。