如何在 ubuntu 20.04 中安装编译器 g++-4.8.5

How to Install compiler g++-4.8.5 in ubuntu 20.04

正如标题所说,我无法在当前 ubuntu (20.04) 中安装特定版本的 g++。

我一直在尝试通常的方法:sudo apt install g++-(并显示所有可能性,但只有 8 到 10 的版本)。同样发生在寻找 gcc 的可能性。

也试过这个:gist.github.com/application2000/73fd6f4bf1be6600a2cf9f56315a2d91(同样的问题)

找了一段时间后,我放弃了研究,来到了这里。希望比我有智慧的人能帮我解决这个问题。

这些步骤应该有效:

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

几秒钟后(/咯咯笑)gcc-4.8.5 已安装并可用。 备注:

  1. 如果您没有 运行 make -j 的资源,请忽略 -j 或使用 -j4(或适合您系统的其他数字)
  2. 您的里程可能会有所不同,您可能需要安装更多 i386 软件包

因为我不能发表评论,所以我将添加到@bebbo 解决方案中,在 Ubuntu 20.04 上,我必须添加到他的步骤中以修补以下补丁:

  1. 添加一个包含到 signal.h 到 libsanitizer/asan/asan_linux.cc https://patchwork.ozlabs.org/project/gcc/patch/6824253.3U2boEivI2@devpool21/

  2. 换行libsanitizer/tsan/tsan_platform_linux.cc 如图所示。行号可能不是补丁中所述的行号,因此请搜索已更改的行。其他文件无需打补丁

https://git.pantherx.org/mirror/guix/commit/0b93d04ac537d6413999349ebe7cdcb1e961700e

添加到 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-multiliblibstdc++6:i386查看代码底部的InstGcc4 class

install_gcc.rb

它们可能会在几个月后变成 'un-installable' 状态。但至少 gcc-4.8.5 现在可以工作了。

ps。由于 CUDA,我已经开始编译这个旧的 gcc...我的硬件是十年前的 GeForce 9600/9400(是的 2008 MBP),CUDA 6.5 是该机器的最佳选择。

pps。无论如何,奇怪的是,我不得不为 CXXFLAGS 给出 '-std=gnu++11' 以避免错误。