7

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

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

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

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

4

3 回答 3

5

这些步骤应该有效:

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

几秒钟后 (/giggles)gcc-4.8.5安装并可用。笔记:

  1. 如果您没有运行make -jomit-j或使用的资源-j4(或适合您的系统的不同数字)
  2. 您的里程可能会有所不同,您可能需要安装更多 i386 软件包
于 2020-08-30T13:04:08.093 回答
0

Since I can't comment I will add to @bebbo solution that on an Ubuntu 20.04 I had to add to his steps patching the following patches:

  1. Add an include to signal.h to libsanitizer/asan/asan_linux.cc https://patchwork.ozlabs.org/project/gcc/patch/6824253.3U2boEivI2@devpool21/

  2. change a line in libsanitizer/tsan/tsan_platform_linux.cc as shown. line number may not be the one stated in the patch so search for the line that was changed. There is no need to apply the patch to the other files

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

于 2020-10-29T14:35:02.930 回答
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下成功编译了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 现在可以工作了。

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

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

于 2021-02-24T02:50:22.287 回答