LINUX.ORG.RU

несколько gcc в системе


0

0

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

предложу еще один вариант ( если собираете GCC вручную )

можно собрать с разными префиксами ( --prefix=/usr/local/gcc-4.4 например ) и переключаться
через export CC=/path/to/gcc

или PATH

export PATH=/usr/local/gcc-4.4/bin:$PATH

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

вручную. gcc -v выдает опции сборки. собирал с теми же, в итоге загубил оба предыдущих + новый gcc не цепляет свои же библиотеки...

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

Configured with: ../configure --prefix=/usr --mandir=/usr/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --host=i586-pc-linux

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

спасибо, попробую. через часок посмотрим))

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

предложу еще один вариант ( если собираете GCC вручную )

способ хороший, но обновлять геморно

Boy_from_Jungle ★★★★
()

Gentoo >> everything else

sys-devel/gcc-config

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

во! решение близко. осталось только выяснить как установить gcc так, чтобы не убить два предыдущих и чтобы работали скрипты переключения gccv2 и gccv3, например:

/usr/sbin/alternatives --set cpp /usr/bin/cpp-3.3.6
как заставить gcc собраться и скопироваться в те же каталоги, что и два предыдущих компилятора, и при этом иметь имя gcc-4.2.4, g++-4.2.4 и т.д., и для либ тоже самое?

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

1. Сочувствую, сам с МСВС работал
2. Я новый gcc ставил вообще в /opt, чего и тебе советую

Divius ★★
()

поставил компилятор:

[code] ./configure --prefix=/usr --mandir=/usr/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-ckecking --with-system-zlib --enable-__cxa_atexit --host=i686-pc-linux --program-suffix=-4.2.4 [/code]

добавил ссылки [code] alternatives --install /lib/cpp cpp /usr/bin/cpp-4.2.4 2 \ --slave /usr/bin/c++ c++ /usr/bin/c++-4.2.4 \ --slave /usr/bin/c++filt c++filt /usr/bin/c++filt-4.2.4 \ --slave /usr/bin/cc cc /usr/bin/gcc-4.2.4 \ --slave /usr/bin/cpp2 cpp2 /usr/bin/cpp-4.2.4 \ #!!!!! --slave /usr/bin/g++ g++ /usr/bin/g++-4.2.4 \ --slave /usr/bin/gcc gcc /usr/bin/gcc-4.2.4 \ --slave /usr/bin/gcov gcov /usr/bin/gcov-4.2.4 \ --slave /usr/bin/protoize protoize /usr/bin/protoize-4.2.4 \ --slave /usr/bin/unprotoize unprotoize /usr/bin/unprotoize-4.2.4 [/code]

строка, отмеченная !!!!! выдает: [code] ссылка /usr/bin/cpp неверна для slave cpp2 (/usr/bin/cpp2 cpp2) [/code] почему? ведь там /usr/bin/cpp2, а не /usr/bin/cpp ?

отстутствуют c++filt, protoize, unprotoize... что-то не так собирал или они удалены?

ну и главное: после [code] /usr/sbin/alternatives --set cpp /usr/bin/cpp-4.2.4 [/code]

версия gcc установилась верная, но при сборке тестового примера выдает:

[code] /tmp/ccyh6ZIO.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0' collect2: выполнение ld завершилось с кодом возврата 1 [/code]

каких-то либ не хватает? как бороться?

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

добавил читаемости))

поставил компилятор:

 ./configure --prefix=/usr --mandir=/usr/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-ckecking --with-system-zlib --enable-__cxa_atexit --host=i686-pc-linux --program-suffix=-4.2.4 

добавил ссылки

 alternatives --install /lib/cpp cpp /usr/bin/cpp-4.2.4 2 \
 --slave /usr/bin/c++ c++ /usr/bin/c++-4.2.4 \
 --slave /usr/bin/c++filt c++filt /usr/bin/c++filt-4.2.4 \
 --slave /usr/bin/cc cc /usr/bin/gcc-4.2.4 \
 --slave /usr/bin/cpp2 cpp2 /usr/bin/cpp-4.2.4 \ #!!!!! 
 --slave /usr/bin/g++ g++ /usr/bin/g++-4.2.4 \
 --slave /usr/bin/gcc gcc /usr/bin/gcc-4.2.4 \
 --slave /usr/bin/gcov gcov /usr/bin/gcov-4.2.4 \
 --slave /usr/bin/protoize protoize /usr/bin/protoize-4.2.4 \
 --slave /usr/bin/unprotoize unprotoize /usr/bin/unprotoize-4.2.4 

строка, отмеченная !!!!! выдает:

 ссылка /usr/bin/cpp неверна для slave cpp2 (/usr/bin/cpp2 cpp2)
почему? ведь там /usr/bin/cpp2, а не /usr/bin/cpp ?

отстутствуют c++filt, protoize, unprotoize... что-то не так собирал или они удалены?

ну и главное: после

 /usr/sbin/alternatives --set cpp /usr/bin/cpp-4.2.4 

версия gcc установилась верная, но при сборке тестового примера выдает:

 /tmp/ccyh6ZIO.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0' collect2: выполнение ld завершилось с кодом возврата 1

каких-то либ не хватает? как бороться?

ilyagoo
() автор топика
Ответ на: добавил читаемости)) от ilyagoo

gcc test.cpp выкидывает сообщение, указанное выше. g++ test.cpp компилит, но при запуске вылетает:

./a.out: /lib/libgcc_s.so.1: version `GCC_4.2.0' not found (required by /usr/lib/libstdc++.so.6)
а вроде бы компилятор был собран и установлен... что не так-то?

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

Как установить не знаю, но с апдейт-альтернативс лучше так делать в мсвс:

# update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-2.95 295 --slave /usr/bin/g++ g++ /usr/bin/g++-2.95 --slave /usr/bin/gcov gcov /usr/bin/gcov-2.95 --slave /usr/bin/c++ c++ /usr/bin/c++-2.95 --slave /usr/bin/cc cc /usr/bin/gcc-2.95

# update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-3.3.6 336 --slave /usr/bin/g++ g++ /usr/bin/g++-3.3.6 --slave /usr/bin/gcov gcov /usr/bin/gcov-3.3.6 --slave /usr/bin/c++ c++ /usr/bin/c++-3.3.6 --slave /usr/bin/cc cc /usr/bin/gcc-3.3.6


update-alternatives --config gcc

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

А, черт. не заметил более поздний пост, что ты так и делаешь

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

в общем в /lib валялась ссылка на /lib/libgcc_s-3.3.6.so.1, которая по размеру в 10 раз отличалась от вновь собранной. удалил ее - все пашет. багов пока не видно.

ilyagoo
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.