C++ g++;以“失败”;“未定义引用”;标准C+的错误+;图书馆

C++ g++;以“失败”;“未定义引用”;标准C+的错误+;图书馆,c++,linux,gcc,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):

我已经构建并安装了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)'
感谢用户的评论,我查看了link命令,显然有问题。这可能是一个cmake问题。以下是链接命令:

/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.././metractans/libtimetrans.a../.libversion.a../

请注意,'-L'链接到较旧版本的gcc。接下来的问题是如何告诉cmake库在哪里。我不知道怎么做。这就是使用LD_LIBRARY_PATH的意义所在。我认为这可以解决这个问题


另一方面,让我有些不安的是,cmake没有找到$path中的g++编译器,而是恢复为/usr/bin/c++。然后,我不得不编辑cmakcache.txt文件,使其使用实际上在路径上的g++而不是/usr/bin/c++

我们可以通过以下方式解决这个问题:

1) 定义环境变量CC(=gcc)和CCX(=g++)以指向我们正在使用的gcc编译器。CGube使用这些环境变量来对C和C++编译器进行FIX。p> 2) 将LD_LIBRARY_PATH设置为gcc和g++编译器的相应库支持的路径

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

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


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

显示编译命令。
LD_LIBRARY_PATH
在链接过程中无效,它只告诉动态链接器(也称为动态加载程序)在链接库后的运行时在何处查找库。要在链接时链接到其他库,需要使用
-L
选项(或控制-L选项的某个CMake变量)
#include <iostream>

int main() {
  std::cout << "Hello World!" << std::endl;
  std::cin.get();
  return 0;
}
/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:...