如何使用旧版本的 GCC

如何使用旧版本的 GCC

我正在使用 Ubuntu 18.04.4 LTS,并尝试按照他们的在线说明编译基于 MATLAB 的程序 (SPM12),我认为我遇到了 GCC 版本“太新”的问题。当我到达命令所在的步骤时,我make && make install收到以下错误消息:

Warning: You are using gcc version '7.5.0'. The version of gcc is not supported. The version currently supported with MEX is '6.3.x'. For a list of currently supported compilers see: https://www.mathworks.com/support/compilers/current_release.
/usr/bin/ld: cannot find -lstdc++
collect2: error: ld returned 1 exit status

Makefile:247: recipe for target 'spm_sample_vol.mexa64' failed
make: *** [spm_sample_vol.mexa64] Error 255

任何建议都将不胜感激!我不是专家,所以如果你能提供具体的命令来遵循,我会非常感激。本

答案1

首先,尝试找到所需 GCC 版本发布后发布的 Ubuntu 版本。您可以在以下位置找到 GCC 的发布历史记录GCC 发布 - GNU 项目 - 自由软件基金会 (FSF)以及 Ubuntu 的Ubuntu 版本历史 - 维基百科

GCC 6.3于 2016 年 12 月 21 日发布,最接近的 Ubuntu 版本是Ubuntu 17.04(Zesty Zapus)于 2017 年 4 月发布。您可以使用 Zesty 的存档来安装它。但由于 Zesty 早在 2018 年 1 月就已停产,因此其存档已移至旧版本. 要从其存储库安装 GCC 6.3:

  1. 添加 Zesty 的存储库并禁用 Bionic 的 Universe 存储库,因为它包含 6.4 和 6.5,它们可能会在尝试安装 6.3 时安装。

    echo "deb http://old-releases.ubuntu.com/ubuntu zesty main" | sudo tee /etc/apt/sources.list.d/zesty.list
    sudo apt-add-repository -r universe
    
  2. 更新可用的包信息并安装 GCC 6.3。

    sudo apt update
    sudo apt install gcc-6
    
  3. 添加 GCC 6 作为 GCC 的替代品。

    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 1
    
  4. 使用 检查 GCC 版本gcc -v。您应该得到如下输出:

    使用内置规格。
    COLLECT_GCC=gcc
    COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/6/lto-wrapper
    目标:x86_64-linux-gnu
    配置为:../src/configure -v --with-pkgversion='Ubuntu 6.3.0-12ubuntu2' --with-bugurl=file:///usr/share/doc/gcc-6/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-6 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --启用-gnu-unique-object --disable-vtable-verify --启用-libmpx --启用-plugin --启用-default-pie --使用-system-zlib --禁用-browser-plugin --启用-java-awt=gtk --启用-gtk-cairo --使用-java-home=/usr/lib/jvm/java-1.5.0-gcj-6-amd64/jre --启用-java-home --使用-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-6-amd64 --使用-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-6-amd64 --使用-arch-directory=amd64 --使用-ecj-jar=/usr/share/java/eclipse-ecj.jar --使用-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
    线程模型:posix
    gcc 版本 6.3.0 20170406(Ubuntu 6.3.0-12ubuntu2) 
    
  5. 完成“制作”后,您可以删除已安装的 GCC 6.3 和 Zesty 的存储库信息。然后重新启用 Bionic 的 Universe 存储库。

    sudo apt purge gcc-6
    sudo apt autoremove --purge
    sudo rm /etc/apt/sources.list.d/zesty.list
    sudo apt-add-repository universe
    
  6. 修复 的符号链接/usr/bin/gcc

    ln -sf /usr/bin/gcc-7 /usr/bin/gcc
    

答案2

从源代码编译

这里我维护了 Ubuntu 所有可信的 GCC 包的列表:如何在 Ubuntu 上使用最新的 GCC?

如果您感兴趣的 GCC 不在那里,除了从源代码编译您的 GCC(或者更好的是,移植您的软件)之外,我看不到任何选择。

最简单的方法是检查 crosstool-NG 是否支持该版本。这里我给出了一个例子:https://stackoverflow.com/questions/10412684/how-to-compile-my-own-glibc-c-standard-library-from-source-and-use-it/52454710#52454710

如果没有,那么您只需要使用在 Google 上找到的手动构建说明进行操作,例如:https://stackoverflow.com/questions/26305738/can-i-build-gcc-for-arm-with-an-x64-one/26306591#26306591

相关内容