我正在使用 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:
添加 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
更新可用的包信息并安装 GCC 6.3。
sudo apt update sudo apt install gcc-6
添加 GCC 6 作为 GCC 的替代品。
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 1
使用 检查 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)
完成“制作”后,您可以删除已安装的 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
修复 的符号链接
/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