如标题所述,我无法在当前的Ubuntu (20.04)中安装特定版本的g++。
我已尝试了常见的方法,例如:sudo apt install g++-(并显示所有可能性,但只有8到10版本)。寻找gcc的可能性时也出现了相同的问题。
我还尝试过这个:gist.github.com/application2000/73fd6f4bf1be6600a2cf9f56315a2d91 (同样的问题)。
在寻找一段时间后,我放弃了研究并来到了这里。希望有比我更聪明的人能够帮助我解决这个问题。
如标题所述,我无法在当前的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
已安装并可用。make -j
的资源,请省略-j
或使用-j4
(或适合您系统的其他数字)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补充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-multilib
和libstdc++6:i386
。请查看代码底部的InstGcc4类。
它们可能在几个月后变成“无法卸载”的状态。但至少gcc-4.8.5现在可以使用。
附言:由于CUDA,我已经开始编译这个旧的gcc...我的硬件是十年前的GeForce 9600/9400(是的,2008年的MBP),CUDA 6.5是那台机器的最佳选择。
附言二:不管怎样,奇怪的是,我必须为CXXFLAGS提供“-std=gnu++11”以避免错误。
由于我无法评论,我将补充@bebbo的解决方案,在Ubuntu 20.04上,我不得不添加以下修补程序:
在libsanitizer/asan/asan_linux.cc中添加一个包含signal.h的链接 https://patchwork.ozlabs.org/project/gcc/patch/6824253.3U2boEivI2@devpool21/
更改libsanitizer/tsan/tsan_platform_linux.cc中的一行,如所示。行号可能与修补程序中所述的不同,因此请搜索已更改的行。无需将修补程序应用于其他文件
https://git.pantherx.org/mirror/guix/commit/0b93d04ac537d6413999349ebe7cdcb1e961700e
docker pull gcc:4.8.5
命令。 - Thomas Sablik