LINUX.ORG.RU

Как сейчас принято ставить древние версии gcc на современный линукс

 , ,


2

2

Ну в общем сабж, если конкретно то пусть будет версия 3.2 . Из того, что пробовал: скомпилировать из сырцов - ошибка компиляции, пакеты из древних дистров - неудовлетворенные зависимости. Что получилось - сделать новое окружение в анаконде, но там минимальная версия 5.4. Что не пробовал - chroot, docker и ВМ. Все же это излишне кмк.

★★★★★

Что значит «принято»? Это не принято. Необходимость в этом сама по себе признак профнепригодности. Зачем может понадобиться код четвертьвековой давности? Если он и правда нужен, почему его не актуализировать для сборки в актуальных окружениях?

anonymous
()

Я такой вопрос решил для себя виртуалкой с древним образом RHEL или RHL.

Где-то у меня были образы с GCC 3.3 или GCC 2.95, не помню где какой, но если интересно – качай, запускай в VirtualBox, смотри:

Удачи.

EXL ★★★★★
()

всегда можно взять Slackware подревнее и в нём собрать :-)

почти наверняка можно взять из него пакеты gcc и поместить в chroot или даже просто отдельную иерархию. Там пакеты это архивы - gz, xz без лишних наворотов.

MKuznetsov ★★★★★
()

Можно попробовать обратный бутстрап сделать. Ставим самую старую версию, которая ставится, в ней собираем самую старую, которая собирается и тд. Но могут проблемы с окружением вылезти. С glibc, с другими библиотеками, их все тоже надо собирать свои и потом подсовывать.

// Сам бутстрапил вверх, назад не пробовал

anonymous
()

Это боль. Новые GCC+ко не умеют собирать старые GCC+ко. Дикая проблема buildroot и т.п..

  • Самое простое виртуалка.
  • Можешь попробовать старый Debian запустить в докере. Старые редхады могут не запуститься в докере.
  • отыскать собранный tool chain
  • собрать в старом окружении старый crosstool-ng и использовать его на новой системе
AlexVR ★★★★★
()
Ответ на: комментарий от anonymous

Зачем может понадобиться код четвертьвековой давности?

Вот не поверишь, чтобы изменить одну константу в софтине, которая работает уже 25 лет и при этом уже на более-менее свежем дебиане. Тут рядом еще 16-битные экзешники для офтопика используют, но слава богу не хотят их изменять.

einhander ★★★★★
() автор топика
Ответ на: комментарий от einhander

Если одну константу поменять, то может самое простое - это ничего не компилировать, а пропатчить исполняемый файл. Ищешь в hex-редакторе эту константу (с учётом порядка байт) и меняешь. Если что-то не то поменял и вариантов присутствия много, меняешь в другом месте

anonymous
()
Ответ на: комментарий от anonymous

А если потом надо будет функцию добавить или что-то еще по мелочи поправить? Я понимаю, что наиболее правильное решение переписать под свежий gcc, но тут нужен кто-то с более высокой квалификацией.

einhander ★★★★★
() автор топика
Ответ на: комментарий от kott

сабж есть в дебиановских репах

Всегда был со времён сарджа, что ли. Я про то, что патчи для sle10, который немного устарел. Не так сильно конечно, но равно уже древность.

einhander ★★★★★
() автор топика

Лучше скажи зачем? Что в нём есть такого, чего выпилили из новых версий?

А вообще если прямо действительно нужно, то для таких динозавров я бы взял виртуалку тех лет и не засорял рабочую систему.

snizovtsev ★★★★★
()
Ответ на: комментарий от AlexVR

GCC+ко не умеют собирать старые GCC+ко

А отчего так? Не следовали стандартам & напихали несовместимых расширений?

thunar ★★★★★
()
Последнее исправление: thunar (всего исправлений: 1)
Ответ на: комментарий от snizovtsev

Что в нём есть такого, чего выпилили из новых версий?

Хз, но на свежем gcc не собирается, на более древнем тоже, но ошибок меньше.

не засорял рабочую систему.

Собрать в каталоге пользователя, вай нот?

einhander ★★★★★
() автор топика
Ответ на: комментарий от alt-tab-let

Все есть, но как то не всё. Компилятор vb6 спокойно ставится и работает в том же офтопике. А древняя gcc ставится нетривиально и требует поставить половину старой системы. Уменьшение системного раздела на лету, без размонтирования ext4 не умеет, в отличие от ntfs в офтопике.

P.S. не думал, что буду защищать офтопик. Что дальше, резиновые женщины?))

einhander ★★★★★
() автор топика
Ответ на: комментарий от einhander

Хз, но на свежем gcc не собирается,

Ты покажи ошибки хоть и скажи на чём проект, на C или C++? Может быть банальным -fcommon всё разрешится.

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от einhander

В оффтопике свои проблемы, местами и похуже, да. Чего только стоит что они умудрились сделать utf16-le основной системной кодировкой. Я вот только сегодня узнал — думал оно там только в кишках там, а оказалось что прямо таки в пользовательском окружении.

thunar ★★★★★
()
Последнее исправление: thunar (всего исправлений: 1)
Ответ на: комментарий от einhander

А древняя gcc ставится нетривиально и требует поставить половину старой системы.

Энжой ё so hell.

Кстати, сам gcc еще с древности прекрасно умеет работать из рандомного каталога, не привязываясь к системным или вкомпилированным путям, и ничего не мешает делать портабельные сборки. Просто не принятой линуксовой культурой разработки.

wandrien ★★
()
Последнее исправление: wandrien (всего исправлений: 1)
Ответ на: комментарий от EXL

Может быть банальным -fcommon всё разрешится.

А может не решиться. Если у него древний софт в продакшене, который потребовалось запатчить, то самое разумное — воспроизвести новый билд в виртуалке или чруте в той же среде, что собирался предыдущий билд.

А то если на новой ОС что-нибудь скопилируется, но не заработает корректно, проблема может выявиться потом внезапно.

wandrien ★★
()
Ответ на: комментарий от einhander

Опытным путём выяснилось, что собирается с помощью gcc-4.9 из jessie. На 5.4 и выше ошибка

Тогда наиболее вероятно, что дело в стандарте языка по-умолчанию (опиция -std=). В старых версиях дефолты были c89 и c++98, потом это меняли.

Я же в своё время сталкивался с другим случаем: старый проект был написан под g++ 3.x, а под 4.х собираться отказывался, так как в коде было полно нарушений стандарта, которые 3.х разрешал, а 4.х уже нет. И внутри серии 4.0—4.9 тоже шло послежовательное ужесточение следования стандартам, хотя уже не настолько радикальное.

annulen ★★★★★
()

Некоторые люди делают портабельные сборки gcc, например тут. Но для 3.2 ты вряд ли что-то найдёшь, его даже непортабельно собрать на современной системе — это очень сложный многостадийный квест.

annulen ★★★★★
()