Установка нескольких версий gcc рядом

Автор su16, 11 февраля 2013, 11:57:20

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

su16

Доброго времени.

собрал gcc 4.5.2 на debian 6 по этой инструкции. Чтобы не затёрлась родная версия gcc, конфигурировал свою с префиксом --prefix=/opt/gcc-4.5.2
затем выполнил make install и обнаружил свежеиспечёный gcc в папке префикса.
то есть всё как надо получилось.

теперь надо натравить систему на новую версию. честно говоря я не осилил гугл в плане того, как это делается классически, поэтому сдела наугад следующим образом:
1) создал симлинк
rm /usr/bin/gcc
ln /opt/gcc-4.5.2/bin/gcc /usr/bin/gcc
почему-то добавление /opt/gcc-4.5.2/bin в PATH не спасает. система не видит бинарь gcc, пока не сделал симлинк в стандартную папку.

2) в ~/.profile дописал такие пути:
Открыть содержимое (спойлер)
PATH=$PATH:/opt/gcc-4.5.2/bin
export PATH

C_INCLUDE_PATH=/opt/gcc-4.5.2/include
export C_INCLUDE_PATH

CPLUS_INCLUDE_PATH=/opt/gcc-4.5.2/include
export CPLUS_INCLUDE_PATH

CPATH=/opt/gcc-4.5.2/include
export CPATH

LIBRARY_PATH=/opt/gcc-4.5.2/lib
export LIBRARY_PATH
[свернуть]
3) перезапускаюсь,
gcc --version
даёт правильный ответ

4) теперь я пробую этим компилятором собрать, скажем последний cmake...
и он мне в ответ в логах ошибку пишет:

Цитироватьgcc: error trying to exec 'cc1': execvp: No such file or directory

этот файл я вижу в папке, в которой собирал gcc:
~/download/objdir/gcc/cc1
а так же имеется дефолтный, что шёл с системой в
/usr/lib/gcc/i486-linux-gnu/4.3/cc1
/usr/lib/gcc/i486-linux-gnu/4.4/cc1
/usr/lib/gcc/i486-linux-gnu/4.4/cc1plus
однако в папке, куда я ставил компилятор, его нет, то есть в
/opt/gcc-4.5.2/lib/gcc/i686-pc-linux-gnu/4.5.2/
такого файла нет.
я попробовал сделать симлинк из сборочной папки в /usr/bin и при следующей попытке с меня конфигуратор потребовал
crtbegin.o
который есть в
/opt/gcc-4.5.2/lib/gcc/i686-pc-linux-gnu/4.5.2/
но почему то не увиделся...

короче вопроса три,
1) где я наосячил?
2) почему cc1 не попал в папку установки
3) почему не видна crtbegin.o, хотя путь к /opt/gcc-4.5.2/lib прописан везде где только можно?
Если вам дают бесплатное, то, скорее всего, товар - это вы.
https://occupyflash.org/

vladimir_ar

А в чем проблема параллельно их установить? У меня уживаются и не ссорятся
Открыть содержимое (спойлер)
vladimir-7@GNU-HOME:~$ sudo aptitude search gcc | grep i
i   colorgcc                        - цветные сообщения предупреждений/ошибок дл
i   gcc                             - компилятор C от GNU                       
p   gcc:i386                        - компилятор C от GNU                       
i   gcc-4.4                         - компилятор C от GNU                       
p   gcc-4.4:i386                    - компилятор C от GNU                       
i   gcc-4.4-base                    - GCC, набор компиляторов GNU (основной паке
p   gcc-4.4-base:i386               - GCC, набор компиляторов GNU (основной паке
i   gcc-4.4-doc                     - documentation for the GNU compilers (gcc,
i   gcc-4.4-locales                 - GCC, the GNU compiler collection (native l
i   gcc-4.4-multilib                - GNU C compiler (multilib files)           
p   gcc-4.4-multilib:i386           - GNU C compiler (multilib files)           
i   gcc-4.4-source                  - исходные коды коллекции компиляторов GNU 
i   gcc-4.5-base                    - The GNU Compiler Collection (base package)
i A gcc-4.6                         - компилятор C от GNU                       
p   gcc-4.6:i386                    - компилятор C от GNU                       
i   gcc-4.6-base                    - GCC, набор компиляторов GNU (основной паке
p   gcc-4.6-base:i386               - GCC, набор компиляторов GNU (основной паке
i A gcc-4.6-doc                     - documentation for the GNU compilers (gcc,
i   gcc-4.6-locales                 - GCC, the GNU compiler collection (native l
i   gcc-4.6-multilib                - GNU C compiler (multilib files)           
p   gcc-4.6-multilib:i386           - GNU C compiler (multilib files)           
i   gcc-4.6-plugin-dev              - Files for GNU GCC plugin development.     
p   gcc-4.6-plugin-dev:i386         - Files for GNU GCC plugin development.     
i   gcc-4.6-source                  - исходные коды коллекции компиляторов GNU 
i A gcc-4.7                         - компилятор C от GNU                       
p   gcc-4.7:i386                    - компилятор C от GNU                       
i   gcc-4.7-base                    - GCC, набор компиляторов GNU (основной паке
i A gcc-4.7-base:i386               - GCC, набор компиляторов GNU (основной паке
i A gcc-4.7-doc                     - documentation for the GNU compilers (gcc,
i   gcc-4.7-locales                 - GCC, the GNU compiler collection (native l
i   gcc-4.7-multilib                - GNU C compiler (multilib files)           
p   gcc-4.7-multilib:i386           - GNU C compiler (multilib files)           
i   gcc-4.7-plugin-dev              - Files for GNU GCC plugin development.     
p   gcc-4.7-plugin-dev:i386         - Files for GNU GCC plugin development.     
i   gcc-4.7-source                  - исходны
[свернуть]
Debian Testing, kernel 3.16-2-amd64, OpenBox
AMD A8-3750 / 16Gb RAM / ATI HD6550D (onboard) / Sound ASUS Xonar - DS
_______________________________
Debian Testing, kernel 3.14-2-amd64, OpenBox
HP-655 AMD E1 / 8Gb RAM / ATI HD7310M

su16

#2
Спасибо за предложение, давай разберёмся.
я в вопросах установки не силён, но насколько я понимаю, после установки нового gcc по стандартным путям произойдёт следующий ряд проблем
1) сейчас все бинари собраны без "unix name" то есть у меня после сборки бинарь зовётся не "gcc-4.5.2", как стандартные "gcc-4.3" и "gcc-4.4", а тупо "gcc". и так все бинари, либы и файлы. то есть, когда новый gcc ляжет по стандартным путям, в следующий раз я так ничего не смогу поставить, не затерев то что есть. в общем то, на сайте gcc писано, что поверх ставить не очень гут.
соответственно, мне либо надо научиться собирать все файлы с unix name либо ставить в отдельную папку, как щас. С unix name не очень понятно, что в этом случае должно быть с хедерами и либами... типа stdio-4.5.2.h чтоль?!  :D
2) допустим я вкорячил как-то его по стандартным путям через make install. ок, теперь я удаляю папку, где собирал исходники и через месяц надумал удалить эту версию. в dpkg естественно эта установка никак не значится.
мои действия?
Если вам дают бесплатное, то, скорее всего, товар - это вы.
https://occupyflash.org/

su16

зря перенесли тему в программирование.
тут вопрос фактически про установку софта разных версий параллельно. просто рассматривается на примере gcc... :-\
Если вам дают бесплатное, то, скорее всего, товар - это вы.
https://occupyflash.org/

vladimir_ar

Я что-то не совсем понимаю. Во первых - зачем самому собирать gcc? Во вторых - (может ошибаюсь) - но при сборке используется та версия gcc, которая прописана в файлах сборки. Или нет?
Debian Testing, kernel 3.16-2-amd64, OpenBox
AMD A8-3750 / 16Gb RAM / ATI HD6550D (onboard) / Sound ASUS Xonar - DS
_______________________________
Debian Testing, kernel 3.14-2-amd64, OpenBox
HP-655 AMD E1 / 8Gb RAM / ATI HD7310M

Olej

Цитата: su16 от 13 февраля 2013, 13:21:12
тут вопрос фактически про установку софта разных версий параллельно. просто рассматривается на примере gcc... :-\
Пример gcc как-раз не самый удачный (самый неудачный?) для примеров "установки софта разных версий параллельно":
- установка gcc тянет за собой установку соответствующей версии stdlib - интерфейс (через int80h или sysenter) ко всем системным вызовам ... и реализация которых для разных версий могут отличаться;
- установка gcc тянет за собой установку нового комплекта заголовочных файлов .h в /usr/include ... хоть это существенно только для программистов (для компиляции)
И с этими параллельными установками нужно как-то разбираться.

ihammers

А не проще установить из пакетов, а потом при сборке пакетов/программ указывать в параметрах (или через export) путь до нужно версии gcc?

ИМХО: так будет правильно.

PS: так собирал несколько раз NWChem, но потом он появился в репозитарии:)
Debian GNU/Linux Bookworm, LXQt/OpenBox: AMD Ryzen 5 5600G / 64Gb RAM
_______________________________
Debian GNU/Linux Bookworm, без графики: AMD Phenon X4 / 16Gb RAM
_______________________________
Debian GNU/Linux Bookworm, LXQt/OpenBox: Acer Aspire One 722 AMD C60 / 8Gb RAM / ATI HD6290

Olej

Цитата: ihammers от 14 февраля 2013, 08:56:16А не проще установить из пакетов, а потом при сборке пакетов/программ указывать в параметрах (или через export) путь до нужно версии gcc?

Путь до нужной версии вы укажите...
А как вариант подключаемой stdlib будете указывать? ... и заголовочные файлы для компиляции?

su16

#8
в конечном итоге указал пути следующи образом:
Открыть содержимое (спойлер)

PATH=/opt/gcc-4.5.2/bin:/opt/cmake-2.8.10.2-Linux-i386/bin:/opt/openssl_1.0.1c/bin:/opt/xerces-c_3.1.1/bin: /opt/openssl_1.0.1c/include:/opt/xerces-c_3.1.1/include:$PATH
export PATH
C_INCLUDE_PATH=/opt/gcc-4.5.2/include: /opt/openssl_1.0.1c/include:/opt/xerces-c_3.1.1/include
export C_INCLUDE_PATH
CPLUS_INCLUDE_PATH=/opt/gcc-4.5.2/include :/opt/openssl_1.0.1c/include:/opt/xerces-c_3.1.1/include
export CPLUS_INCLUDE_PATH
LIBRARY_PATH=/opt/gcc-4.5.2/lib:/var/third/Boost/lib:/opt/openssl_1.0.1c/lib:/opt/xerces-c_3.1.1/lib
export LIBRARY_PATH
LD_LIBRARY_PATH=/opt/gcc-4.5.2/lib:/var/third/Boost/lib:/opt/openssl_1.0.1c/lib:/opt/xerces-c_3.1.1/lib
export LD_LIBRARY_PATH
[свернуть]
здесь самое важное - указать дефолтные пути после своих, то есть PATH приписан в конце, а не в начале, как было до этого.
симлинк из нового gcc в дефолтный /usr/bin тогда делать не надо.
сам gcc конфигурил таким образом:
/root/download/gcc-4.5.2/configure --enable-languages=all --disable-shared --enable-static --disable-bootstrap --enable-threads=posix --enable-tls--with-gmp=/root/download/gmp-4.3.2 --with-mpfr=/root/download/mpfr-2.4.2 --with-mpc=/root/download/mpc-0.8.2 --with-libelf=/root/download/libelf-0.8.13 --prefix=/opt/gcc-4.5.2

собирать cmake оказалось занятием не для слабонервных. во первых важно собрать его новым компилятором, а я его собирал старым до этого. во-вторых, придётся предварительно собирать последние версии cURL-7.28.1, libarchive-3.0.4 и expat-2.1.0, без которых не соберётся утилита ccmake. то есть сам cmake собирается и даже работает, но ccmake в бинарях нет почему-то. это тянет за собой ещё несколько некислых зависимостей. подробнее о сборке можно прочесть на http://www.linuxfromscratch.org/blfs/view/svn/general/cmake.html
я эту процедуру не осилил и тупо от негодования скачал бинари с офсайта.

в результате у меня ccmake сам определил компиляторы:
CMAKE_CXX_COMPILER               /opt/gcc-4.5.2/bin/c++
CMAKE_C_COMPILER                 /opt/gcc-4.5.2/bin/gcc

до этого высвечивался этот "сс", которого у меня не было...

щас всё собралось, но возникла другая проблема: у меня есть в коде, который я собираю, public static const мембер класса, он объявлен и сразу проинициализирован в хедере класса *.h.
Так вот если я его использую в других единицах трансляции, у меня не проходит линковка. а если я его проинициализирую в cpp файле, то линковка срабатывает.
вся фишка в том, что на соседнем компе (его не я настраивал) иходный вариант линкуется при той же версии операционки и компилятора, в вижалстудии 2010 на винде тоже! КАК ?!!! ???
идеи есть такие - я забыл какие-то флажки, когда собирал gcc; я собрал gcc со статической линковкой всех сторонних либ GMP, MPFR, MPC и ELF и это как-то вилияет... какие у вас есть идеи?

Сообщение объединено: 16 февраля 2013, 21:28:57

ответы на ваши вопросы:
Цитата: vladimir_ar от 13 февраля 2013, 15:22:44
Я что-то не совсем понимаю. Во первых - зачем самому собирать gcc? Во вторых - (может ошибаюсь) - но при сборке используется та версия gcc, которая прописана в файлах сборки. Или нет?
1) религия не позволяет  :D
2) либо указана в CMAKE_CXX_COMPILER и CMAKE_C_COMPILER (для cmake в частности) либо в префиксе при конфигурировании, либо прервой указана в PATH.
если пакетно установлено несколько версий, то их можно переключать якобы через update-alternatives, но я не пробовал, ибо моя сборка с checkinstall в пакет не закатывается, а ковыряться с ручной сборкой пакета - дело чрезвычайно неблагодарное.
Цитата: Olej от 13 февраля 2013, 16:14:55Пример gcc как-раз не самый удачный
ок, не проблема, обсуждаем в этой ветке. На сегодня с либами я выше написал как быть. не исключаю, что махнул лишнего в глобальных переменных, постепенно лишнее насчупаю  ;D

Цитата: ihammers от 14 февраля 2013, 08:56:16А не проще установить из пакетов, а потом при сборке пакетов
я хотел именно собрать, но буду очень признателен, если ты подробно напишешь рецепт установки пакета gcc-4.5.2.

Цитата: Olej от 14 февраля 2013, 18:52:25Путь до нужной версии вы укажите...
А как вариант подключаемой stdlib будете указывать? ... и заголовочные файлы для компиляции?
мой мозг это тоже не осилил. как раскидываются либы и заголовки, если я пакеты друг на друга накатываю?! и как понять,какие сейчас использует мой компилятор ???
вот пишу я
gcc -v
там куча путей высвечивается и нужных и ненужных... так какие версии он подхватывает? или как повезёт  ;D
Если вам дают бесплатное, то, скорее всего, товар - это вы.
https://occupyflash.org/

ihammers

Цитата: Olej от 14 февраля 2013, 18:52:25А как вариант подключаемой stdlib будете указывать? ... и заголовочные файлы для компиляции?
Не, раз на раз не приходиться, но в большинстве случаев решается прописыванием путей, а также правка конфигурационных файлов компилируемого пакета.

Цитата: su16 от 16 февраля 2013, 21:06:51я хотел именно собрать, но буду очень признателен, если ты подробно напишешь рецепт установки пакета gcc-4.5.2.
Если будет время (а его очень мало), то попробую расписать.  Но я думаю, что лучше поискать пакет, чтобы не ждать меня, может кто уже собрал его.
Debian GNU/Linux Bookworm, LXQt/OpenBox: AMD Ryzen 5 5600G / 64Gb RAM
_______________________________
Debian GNU/Linux Bookworm, без графики: AMD Phenon X4 / 16Gb RAM
_______________________________
Debian GNU/Linux Bookworm, LXQt/OpenBox: Acer Aspire One 722 AMD C60 / 8Gb RAM / ATI HD6290