【问题标题】:Issue compiling with different version of gcc and g++使用不同版本的 gcc 和 g++ 编译时出现问题
【发布时间】:2017-07-06 09:30:31
【问题描述】:

我想通过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 似乎可以工作,但当我尝试使用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

【问题讨论】:

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


【解决方案1】:

如果你在64位机器上运行,则必须添加

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

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

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

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

然后运行sudo ldconfig

之后,您应该使用ldd 命令检查是否满足所有链接要求。

【讨论】:

    【解决方案2】:

    不要这样做:

    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
    

    根据其他人的 cmets,请注意 g++ >= 5 与 g++

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多