如何在 ubuntu 20.04 中安装编译器 g++-4.8.5
Posted
技术标签:
【中文标题】如何在 ubuntu 20.04 中安装编译器 g++-4.8.5【英文标题】:How to Install compiler g++-4.8.5 in ubuntu 20.04 【发布时间】:2020-09-08 17:29:07 【问题描述】:正如标题所说,我无法在当前的 ubuntu (20.04) 中安装特定版本的 g++。
我一直在尝试通常的事情:sudo apt install g++-(并显示所有可能性,但那里只有 8 到 10 的版本)。寻找 gcc 的可能性也是如此。
也试过这个:gist.github.com/application2000/73fd6f4bf1be6600a2cf9f56315a2d91(同样的问题)
寻找了一段时间后,我放弃了研究,最终来到了这里。希望比我更有智慧的人能帮我解决这个问题。
【问题讨论】:
源码需要自己下载,编译安装。 因此,如果您想要在当前系统上使用这样的旧编译器,最简单的选择是自己构建它(但最简单并不意味着容易)。如果您不需要在 ubuntu 20.04 中使用它,您可以在虚拟机/容器中安装一些较旧的 ubuntu 版本。 真正的问题是:为什么您认为您需要特定版本的 GCC?它向后兼容。 你可以使用 Docker 镜像 hub.docker.com/layers/gcc/library/gcc/4.8.5/images/… 和docker pull gcc:4.8.5
【参考方案1】:
这些步骤应该有效:
sudo dpkg --add-architecture i386
sudo apt update
sudo apt upgrade
sudo apt-get install gcc-multilib libstdc++6:i386
wget https://ftp.gnu.org/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.bz2 --no-check-certificate
tar xf gcc-4.8.5.tar.bz2
# cd gcc-4.8.5
# ./contrib/download_prerequisites
# cd ..
sed -i -e 's/__attribute__/\/\/__attribute__/g' gcc-4.8.5/gcc/cp/cfns.h
sed -i 's/struct ucontext/ucontext_t/g' gcc-4.8.5/libgcc/config/i386/linux-unwind.h
mkdir xgcc-4.8.5
pushd xgcc-4.8.5
$PWD/../gcc-4.8.5/configure --enable-languages=c,c++ --prefix=/usr --enable-shared --enable-plugin --program-suffix=-4.8.5
make MAKEINFO="makeinfo --force" -j
sudo make install -j
请注意,您必须在某些平台上取消注释 .../download_prerequisites
。对我来说,它可以在没有安装强制软件包的 Centos 7 或 Ubuntu 20 上运行:
Ubuntu/Debian:
sudo apt install make wget git gcc g++ lhasa libgmp-dev libmpfr-dev libmpc-dev flex bison gettext texinfo ncurses-dev autoconf rsync
Centos:
sudo yum install wget gcc gcc-c++ python git perl-Pod-Simple gperf patch autoconf automake make makedepend bison flex ncurses-devel gmp-devel mpfr-devel libmpc-devel gettext-devel texinfo
几秒钟后 (/giggles) gcc-4.8.5
安装并可用。
备注:
-
如果您没有运行
make -j
的资源,请忽略-j
或使用-j4
(或适合您系统的其他数字)
您的里程可能会有所不同,您可能需要安装更多 i386 软件包
【讨论】:
卡在 make MAKEINFO... @OndrejSotolar 也许您可以提供更多详细信息...【参考方案2】:由于我无法发表评论,我将添加到@bebbo 解决方案中,在 Ubuntu 20.04 上我必须添加到他的步骤中修补以下补丁:
将 signal.h 的包含添加到 libsanitizer/asan/asan_linux.cc https://patchwork.ozlabs.org/project/gcc/patch/6824253.3U2boEivI2@devpool21/
在 libsanitizer/tsan/tsan_platform_linux.cc 中更改一行 如图所示。行号可能不是补丁中所述的行号,因此请搜索已更改的行。其他文件无需打补丁
https://git.pantherx.org/mirror/guix/commit/0b93d04ac537d6413999349ebe7cdcb1e961700e
【讨论】:
【参考方案3】:添加到 kpeace 的答案...
sed -i '/#include <pthread.h>/a #include <signal.h>' path_to_gcc4.8.5src/libsanitizer/asan/asan_linux.cc
sed -i 's/__res_state \\*statp = (__res_state\\*)state\\;/struct __res_state \\*statp = (struct __res_state\\*)state\\;/g' path_to_gcc4.8.5src/libsanitizer/tsan/tsan_platform_linux.cc
只需添加几行 sed 即可内联修补它们。
另外,我一直在写一些 Ruby 脚本来安装一些软件(当然是为了好玩。)我最近在 LinuxMint 20.1 下成功编译了 gcc-4.8.5(基于 Ubuntu 20.04,编译器是系统 gcc: 9.3 .0,使用此脚本与sudo apt install build-essential
) 一起安装。此外,在运行此脚本之前,我已经安装了 Bebbo 建议的所有软件包,包括 gcc-multilib
和 libstdc++6:i386
。 查看代码底部的 InstGcc4 类。
install_gcc.rb
它们可能会在几个月后进入“不可安装”状态。但至少 gcc-4.8.5 现在可以工作了。
ps。由于 CUDA,我已经开始编译这个旧的 gcc...我的硬件是十年前的 GeForce 9600/9400(是的 2008 MBP),而 CUDA 6.5 是该机器的最佳选择。
pps。无论如何,奇怪的是,我不得不为 CXXFLAGS 提供 '-std=gnu++11' 以避免错误。
【讨论】:
提醒未来的审阅者,您和 kpeace 当时都没有评论或编辑权限。 Bebbo,如果您可以编辑您的帖子,我们可以清理这些有用的后续内容。以上是关于如何在 ubuntu 20.04 中安装编译器 g++-4.8.5的主要内容,如果未能解决你的问题,请参考以下文章
详细介绍如何在ubuntu20.04中安装ROS系统,超快完成安装(最新版教程)
无法在 linux ubuntu 20.04 中安装 libgraph