用不同版本的gcc和g ++编译问题

时间:2017-07-06 09:30:32

标签: c++ gcc compiler-errors g++

我想通过SSH在我所在的机构输入计算机来编译程序。我想使用不同版本的gccg++来编译此程序,这是一个更新的版本,具有对默认安装版本的重新定位。这意味着我不想使用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似乎有用,但当我尝试使用c++编译g++程序时,我得到了

./[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

2 个答案:

答案 0 :(得分:0)

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

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

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

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

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

并运行sudo ldconfig

之后,您应该与ldd命令一起检查,是否满足所有链式要求。

答案 1 :(得分:0)

不要这样做:

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 option

的文档

示例:

$ 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

与其他人一样&#39;注释,请注意g ++&gt; = 5是ABI与g++不兼容的&lt; 5.