Как установить компилятор g ++ - 4.8.5 в ubuntu 20.04

Как сказано в заголовке, я не могу установить эту конкретную версию g ++ в моем текущем Ubuntu (20.04).

Я пробовал обычные вещи, такие как: sudo apt install g ++ - (и отображал все возможности, но там, где только версии от 8 до 10). То же самое и с поиском возможностей gcc.

Также пробовал это: gist.github.com/application2000/73fd6f4bf1be6600a2cf9f56315a2d91 (такая же проблема)

И после долгих поисков я отказался от своих исследований и оказался здесь. Надеюсь, что кто-нибудь, обладающий большей мудростью, чем я, сможет помочь мне в этом.


person Tomás    schedule 21.05.2020    source источник
comment
Вам необходимо скачать исходники, скомпилировать и установить их самостоятельно.   -  person Jonathon Reinhart    schedule 22.05.2020
comment
Поэтому, если вам нужен такой старый компилятор в текущей системе, самый простой вариант - собрать его для себя (но самый простой - не значит легкий). Если вам не нужно использовать его в ubuntu 20.04, вы можете установить более старую версию ubuntu на виртуальную машину / контейнер.   -  person Slimak    schedule 22.05.2020
comment
Настоящий вопрос: как вы думаете, зачем вам нужна именно эта версия GCC? Он обратно совместим.   -  person Jonathon Reinhart    schedule 22.05.2020
comment
Вы можете использовать Docker-образ hub.docker.com/layers/gcc/library/gcc/4.8.5/images/ с docker pull gcc:4.8.5   -  person Thomas Sablik    schedule 22.05.2020


Ответы (3)


Эти шаги должны работать:

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
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/contrib/download_prerequisites
$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

Через несколько секунд (/ giggles) gcc-4.8.5 установлен и доступен. Примечания:

  1. если у вас нет ресурсов для запуска make -j опустите -j или используйте -j4 (или другое число, подходящее для вашей системы)
  2. ваш пробег может отличаться, и вам может потребоваться установка дополнительных пакетов i386
person bebbo    schedule 30.08.2020

Поскольку я не могу комментировать, я добавлю к решению @bebbo, что на Ubuntu 20.04 мне пришлось добавить к его шагам исправления следующих патчей:

  1. Добавьте include в 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/0b93b93d04/mirror/guix/commit/0b93d04e4 >

person kpeace    schedule 29.10.2020

Добавление к ответу 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 для установки некоторого программного обеспечения (конечно, для развлечения). Недавно я успешно скомпилировал gcc-4.8.5 под LinuxMint 20.1 (на основе 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 работает.

пс. Я начал компилировать этот старый gcc из-за CUDA ... Мое оборудование - это GeForce 9600/9400 десятилетней давности (да, 2008 MBP), и CUDA 6.5 был лучшим вариантом для этой машины.

pps. Как ни странно, мне пришлось выдать '-std = gnu ++ 11' для CXXFLAGS, чтобы избежать ошибок.

person Taylor Shin    schedule 24.02.2021
comment
Отмечая для будущих рецензентов, что ни у вас, ни у kpeace в то время не было прав на комментирование или редактирование. Беббо, если бы ты мог отредактировать свой пост, мы могли бы убрать эти полезные дополнения. - person Kevin Meyer; 24.02.2021