使用不同版本的 gcc 和 g++ 进行编译时出现问题

Issue compiling with different version of gcc and g++

本文关键字:编译 问题 g++ 版本 gcc      更新时间:2023-10-16

我想通过SSH输入我所在机构的计算机来编译程序。我想通过使用不同版本的gccg++来编译该程序,即更新的该程序,其中包含默认安装的 repsect。这意味着我不想使用gcc-4.9.2g++-4.9.2而是使用gcc-6.3g++-6.3。我已经可以在我的计算机上找到它们,实际上我有文件夹/opt/gcc-6.3,所以我不必下载它们。所以我做的是以下几点

export PATH=/opt/gcc-6.3/bin/:$PATH
export LD_LIBRARY_PATH=/opt/gcc-6.3/lib/:$LD_LIBRARY_PATH

但是虽然gcc似乎有效,但当我尝试用g++编译c++程序时,我得到了

./[name_of_the_program].x: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by ./[name_of_the_program].x)
./[name_of_the_program].x: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./[name_of_the_program].x)

显然,如果这是相关信息,我不会在这台机器上root

如果在 64 位计算机上运行,则必须添加

/opt/linux-gnu_6.x.x/lib64 

路径也到你的环境。(或者您机器上的哪个路径用于此编译器版本的库(

如果您获得root访问权限,则最好添加(或者您的管理员应该这样做! 您的库路径信息

/etc/ld.so.conf.d/gcc63.conf

并运行sudo ldconfig.

之后,您应该与ldd联系方确认满足所有链接要求。

不要这样做:

export PATH=/opt/gcc-6.3/bin/:$PATH
export LD_LIBRARY_PATH=/opt/gcc-6.3/lib/:$LD_LIBRARY_PATH

相反,请添加:

-B/opt/gcc-6.3/lib/

到前端gccg++的调用选项(假设/opt/gcc-6.3/lib/确实是直接 包含 GCC 6.3 工具链可执行文件和库(。

请参阅 -Bprefix 选项的文档

例:

$ cat prog.cpp
#include <iostream>
int main()
{
std::cout << "I was compiled with GCC " 
<< __GNUC__ << '.' <<  __GNUC_MINOR__ << '.' << __GNUC_PATCHLEVEL__
<< " to C++ standard " << __cplusplus << std::endl;
return 0;
}
$ which g++-4.9
/usr/bin/g++-4.9
$ which g++-6
/usr/bin/g++-6
$ g++-4.9 -o prog prog.cpp && ./prog
I was compiled with GCC 4.9.4 to C++ standard 199711
$ g++-4.9 -B/usr/lib/gcc/x86_64-linux-gnu/6.2.0 -o prog prog.cpp && ./prog
I was compiled with GCC 6.2.0 to C++ standard 201402

根据其他人的评论,请注意 g++>= 5 与g++<5 不兼容。