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

7

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

我已尝试了常见的方法,例如:sudo apt install g++-(并显示所有可能性,但只有8到10版本)。寻找gcc的可能性时也出现了相同的问题。

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

在寻找一段时间后,我放弃了研究并来到了这里。希望有比我更聪明的人能够帮助我解决这个问题。


你需要下载源代码,自行编译和安装。 - Jonathon Reinhart
所以,如果您想在当前系统上使用旧编译器,最简单的选择是自己构建它(但最简单并不意味着容易)。如果您不需要在 Ubuntu 20.04 中使用它,您可以在虚拟机/容器中安装一些较旧的 Ubuntu 发行版。 - Slimak
1
真正的问题是:你为什么认为你需要那个特定版本的GCC?它是向后兼容的。 - Jonathon Reinhart
2
你可以使用 Docker 镜像 https://hub.docker.com/layers/gcc/library/gcc/4.8.5/images/sha256-4e41303e90cbd46bb8c413e58aaa1778f47203d3862783a10f79fdc1908d3883?context=explore 并执行 docker pull gcc:4.8.5 命令。 - Thomas Sablik
3个回答

6
这些步骤应该有效:
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包

1
卡在了 MAKEINFO 的制作上... - Ondrej Sotolar
@OndrejSotolar 或许你可以提供更多细节... - bebbo
我也遇到了同样的问题,make[2]: 离开目录 '/home/falamiw/xgcc-4.8.5' make[1]: *** [Makefile:21493: stage1-bubble] 错误 2 make[1]: 离开目录 '/home/falamiw/xgcc-4.8.5' make: *** [Makefile:892: all] 错误 2 @bebbo 有什么建议吗? - falamiw
尝试在配置命令中添加“--disable-bootstrap”。 - bebbo

0

补充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是那台机器的最佳选择。

附言二:不管怎样,奇怪的是,我必须为CXXFLAGS提供“-std=gnu++11”以避免错误。


请注意,未来的评论者应该知道您和kpeace当时都没有评论或编辑权限。Bebbo,如果您能够编辑您的帖子,我们可以整理这些有用的跟进内容。 - Kevin Meyer

0

由于我无法评论,我将补充@bebbo的解决方案,在Ubuntu 20.04上,我不得不添加以下修补程序:

  1. 在libsanitizer/asan/asan_linux.cc中添加一个包含signal.h的链接 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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接