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

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

本文关键字:编译器 安装 g++-4 ubuntu      更新时间:2023-10-16

正如标题所说,我无法在当前的 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

森托斯:

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. 您的 milage 可能会有所不同,您可能需要安装更多 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(基于Ubuntu 20.04,编译器是系统gcc:9.3.0,安装sudo apt install build-essential(下使用此脚本编译了gcc-4.8.5。此外,在运行此脚本之前,我已经安装了 Bebbo 建议的所有软件包,包括gcc-multiliblibstdc++6:i386检查代码底部的 InstGcc4 类

install_gcc.rb

几个月后,它们最终可能会成为"不可安装"状态。但至少 gcc-4.8.5 现在可以工作了。

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

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