繁体   English   中英

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

[英]Issue compiling with different version of gcc and g++

我想通过SSH输入我所在机构的计算机来编译程序。 我想使用不同版本的gccg++编译该程序,即使用repsect的最新版本安装到默认安装的版本。 这意味着我要使用gcc-6.3g++-6.3而不是gcc-4.9.2g++-4.9.2 我可以在我的计算机上找到它们,实际上,我的文件夹是/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 comand检查,是否满足所有链接的要求。

不要这样做:

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是ABI与g++ <5不兼容。

暂无
暂无

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

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