繁体   English   中英

g ++失败,并向标准C ++库显示“未定义的引用”错误

[英]g++ fails with “undefined reference” errors to the standard C++ library

我已经构建并安装了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 ++标准库的某些部分已正确安装。 这不仅仅是一个没有安装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:...

感谢用户的评论,我看了一下link命令,显然有一个问题。 这可能是一个问题。 这是链接命令:

/ 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

注意“ -L”链接到旧版本的gcc。 然后的问题是如何告诉cmake库在哪里。 我不知道该怎么做。 那就是使用LD_LIBRARY_PATH的重点。 我认为这将解决该问题。

与此相关的是,令我有些困惑的是,cmake找不到$ path中的g ++编译器,而是恢复为/ usr / bin / c ++。 然后,我不得不编辑CMakeCache.txt文件,以使其使用实际上在路径上的g ++而不是/ usr / bin / c ++。

我们能够解决此问题的方法如下:

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

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

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

在执行此操作之前,cmake将无法正确配置,并且编译将失败。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM