LINUX.ORG.RU

Slackware. Использование нескольких версий gcc

 ,


1

1

Для сборки из исходников нужны разные версии gcc. Подскажите, как-то можно установить несколько версий gcc в один дистрибутив, что бы они не конфликтовали между собой? И можно ли сделать так, что бы запускаемая программа сама выбирала нужную версию gcc?

Установка в качестве системного компилятора нескольких gcc дистрибутивом не поддерживается, но для разработки этого и не требуется. Ставьте нужные gcc по непересекающимся путям в домашний каталог, или в /opt или куда будет удобно.

bormant ★★★★★
()
Последнее исправление: bormant (всего исправлений: 1)

Кстати, если правильно путаю, у Эрика можно подсмотреть (и воспользоваться слакбилдами в качестве шаблонов) вариант установки параллельного gcc - делалось такое в свое время для 14.2.

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

Хорошо

installpkg -root/домашний каталог
решает проблему установки в систему разных версий gcc.
А что при этом выдаст:
gcc --version
И как при сборке использовать необходимую версию gcc?

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

Это неправильный подход и неверные ожидания. Пример приведен для установки пакета в другой корень.
А вам нужно собирать пакет с gcc для параллельной установки, чтобы исключить пересечение по файлам (иначе будет винегрет из файлов разных версий). Это совсем не одно и то же.

gcc --version какой найдётся по $PATH, тот и запустится. А вот что б нашёлся правильный, окружение придётся настроить соответственно - в этом вся суть.

Про Эрика:
https://alien.slackbook.org/blog/what-if-gcc-7-gives-you-headaches/

PS. Это не значит, что именно такой путь единственно возможный. Делить компилятор по именам или по путям - дело хозяйское. Но общий принцип будет тот же - настройка окружения.

bormant ★★★★★
()
Последнее исправление: bormant (всего исправлений: 1)

Для сборки из исходников нужны разные версии gcc.

GCC сейчас мало где применяется. (На FreeBSD в портах есть несколько версий GCC, но ни один из них у меня не используется для сборки чего-либо). В основном используется LLVM.

iZEN ★★★★★
()

ставьте с разными --prefix
для выбора нужной версии при сборке ставите нужный ${prefix}/bin

в начале ${PATH}

или можно использовать например переменные среды

export CC=/usr/local/gcc-8/bin/gcc
export CXX=/usr/local/gcc-8/bin/g++

Sylvia ★★★★★
()

теперь о нюансах... точнее о рантайме

рантайм библиотеки следует иметь системно от самой свежей версии,
иначе будете ловить неразрешенные символы, скорее всего в libstdc++.so.6 , но возможно что и еще где-то словите.

Опять же касательно -lstdc++
(я сейчас от этого отказалась, ибо лениво, но направление укажу)
для 32bit создаете

libstdc++.so

это будет текстовый файл, в него пишете

OUTPUT_FORMAT(elf32-i386)
GROUP ( /путь/к/libstdc++.so.6 /usr/local/gcc-10/lib/libstdc++.a /usr/local/gcc-9/lib/libstdc++.a  AS_NEEDED ( /lib/ld-linux.so.2 ) )

для x86_64 сами посмотрите как корректно записать OUTPUT_FORMAT

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


ну и наверное не стоит сейчас уже использовать GCC 3.4.x и аналогичные древности... они сегфолтят даже собранный с ними bash

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

Сложновато для меня. Я недавно собирал из исходников программу в формате SlackBuild для Slackware 14.2. Для сборки требовался древний autoconf-2.13. Для начала посмотрю как там реализовали.

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

autoconf? тогда причем тут gcc?
но autoconf тоже можно поставить в отдельный префикс

./configure --prefix=/usr/local/autoconf-2.13
make && make install


используете

export PATH=/usr/local/autoconf-2.13/bin:$PATH
а дальше всё как обычно.
Древнятина из отдельного префикса оказывается первой в PATH
и используется по умолчанию.

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

Для использования autoconf-2.13 создаётся следующее, как я понимаю, окружение:

CWD=$(pwd)
TMP=${TMP:-/tmp/SBo}
cd $TMP
tar -xvf $CWD/autoconf-2.13.tar.xz
cd autoconf-2.13
mkdir -p $TMP/autoconf-tmp/usr
./configure \
  --prefix=$TMP/autoconf-tmp/usr \
  --program-suffix=-2.13 \
  --infodir=$TMP/autoconf-tmp/usr/info \
  --mandir=$TMP/autoconf-tmp/usr/man \
  --build=$ARCH-slackware-linux

make || make -j1
make install
PATH=$TMP/autoconf-tmp/usr/bin:$PATH
Видимо по аналогии нужно сделать для gcc.
Правильно я понимаю?

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

Сложновато для меня.

Всегда к услугам мсье виртуалки. Банально, «не круто», но... Всегда можно запилить песочницу с более другим гцц, ну разве что разменять «сложности» красноглазого пердолинга (тоже не рокетсаенс, просто требует привычки) на место на диске, сэкономив время.

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

Мсье виртуалки Банально и «не круто» вобщем не по православному.
Свободное место не резиновое.
И например virtualbox в новых версиях не поддерживает 32bit а старые версии не поддерживают новые ядра linux.
В связи с чем красноглазый пердолинг переходит в виртуальный пердолинг. И как итог нет постижения дзеновской нирваны.
И с учётом того, что при запуске программа требует более новый gcc нужно иметь несколько версий gcc на одной машине.

RodoSlav
() автор топика
Последнее исправление: RodoSlav (всего исправлений: 2)
Ответ на: комментарий от RodoSlav

Свободное место не резиновое.

Разговоры в пользу бедных.

В связи с чем красноглазый пердолинг переходит в виртуальный пердолинг

Кукаретическая брехня. Просто скажи «нравится превозмогать» :) Вспомнилось как мне «разработчики российского дистрибутива на основе slackware» (ТМ) как раз про виртуалку рассказывали что там все плохо, чего там бывает и не бывает — а у них там крэшился установщик их «допиленного» (ТМ) дистрибутива в корку «почему-то» (потому что фаза луны и т.д. оправдания рукожопов с членоруком). Я их тогда нимношк троллил скриншотами ванильной слаки, которая нормально работала в виртуалке. Испортить ванильную слаку — это достижение. Так что не надо мне рассказывать про виртуалки :)

И с учётом того, что при запуске программа требует более новый gcc нужно иметь несколько версий gcc на одной машине.

Или не нужно, или не на одной.

slackwarrior ★★★★★
()
Последнее исправление: slackwarrior (всего исправлений: 6)