Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Общий по Linux (http://forum.oszone.net/forumdisplay.php?f=9)
-   -   Установка/обновление GCC (http://forum.oszone.net/showthread.php?t=14233)

SirHenry 20-05-2003 15:16 76404

Приветствую, All!
---
Как бы сабж провернуть?
Попутно, еще несколько вопросов:
Какие еще либы/программы нужно будет обновлять перед/после сабж(а)?
Каковы возможные последствия "кривой" установки gcc?
Есть ли дока (желательно на русском), *описывающая по шагам процесс обновления уже установленного компилятора?
---
Вроде все вопросы пока :-)

[s]Исправлено: SirHenry, 16:18 20-05-2003[/s]

Zur0 20-05-2003 18:19 76405

Цитата:

Какие еще либы/программы нужно будет обновлять перед/после сабж(а)?
После еще можно glibc обновить. А лучше до.

Последствий почти никаих. Возмеш да с рпм'ки переставиш.

А инструкция step-by-step -- LFSBook :gigi:
Постараешся и на русском найдеш

SirHenry 21-05-2003 14:03 76406

2 Zur0
Цитата:

После еще можно glibc обновить. А лучше до.
}{m, а если ставить компилятор gcc-3.3, то какой до какой версии следует обновлять glibс?

Zur0 21-05-2003 18:04 76407

glibc-2.3.2 сейчас последняя еси не ошибаюсь.
Цитата:

}{m, а если ставить компилятор gcc-3.3,
А тебе оно надо. ИМХО пока лучше 3.2.3

ruslandh 22-05-2003 00:30 76408

SirHenry
Я думаю при установке нового gcc Вы это быстро выясните :)

SirHenry 22-05-2003 13:09 76409

ruslandh
Цитата:

Вы это быстро выясните
Да уж... Но хотелось бы сначала солому подложить :biggrin:
2All:
Из LFSbook читаю:
"Для инсталляции GCC выполните приведенные ниже команды:
configure --prefix=/usr --enable-shared --enable-languages=c,c++ --enable-threads=posix --with-slibdir=/lib
--enable-__cxa_atexit --enable-clocale=gnu &&
make bootstrap &&
make install &&

Вроде сделал по написанному... gcc -v заявляет, что стоит версия 3.3.... А вот компиляция ядра (пробовал 2.4.21-pre2 и 2.4.20) заканчивается ошибкой.... хотя на старом компиляторе (2.96 вроде) оно собиралось весело и задорно...
В чем проблема может заключаться?

Zur0 22-05-2003 18:30 76410

Цитата:

заканчивается ошибкой
Ошибку в студию....

ruslandh 23-05-2003 00:09 76411

SirHenry
В принципе могут появляться ошибки из-за тонкостей синтаксиса различных версий gcc. Т.е не всякий программный продукт, который транслируется в одной версии gcc будет транслироваться в другой. Конечно можно исправить исходный текст, но ... Причем независимо от того какой вариант рассматривать - переход со старшей версии на младшую, или обратно.
Что поделаешь - специфика Linux :(
PS Интересно - а в каком "живом" дистрибутиве ядро собрано на gcc 3.x ?
В больинстве мне известных просто есть механизм смены текущего gcc c одной версии на другую. И это будет продолжаться до тех пор, пока :
1 gcc версии 3.x будет выдавать такой-же безошибочный продукт, что и gcc 2.96. Пока-же все ответственные пакеты транслируются в gcc 2.96 *
2 в каком-нибудь RPM/Deb дистрибутиве все *пакеты ни будут собраны на gcc 3.x. (А с учетом того, что к тому времени появится какой-нибудь gcc 4.x ...)


Zur0 23-05-2003 05:03 76412

Цитата:

"Для инсталляции GCC выполните приведенные ниже команды:
насколько я помню там не make install а make install-no-fixedincludes
А gcc-2.96 имеет опции оптимизации под конкретный процессор?




[s]Исправлено: ruslandh, 8:09 23-05-2003[/s]

SirHenry 23-05-2003 12:32 76413

Zur0
Цитата:

Ошибку в студию....
Этим все и заканчивается:
make[2]: Выход из каталог `/usr/src/linux-2.4.20/arch/i386/lib'
make[1]: Выход из каталог `/usr/src/linux-2.4.20/arch/i386/lib'
ld -m elf_i386 -T /usr/src/linux-2.4.20/arch/i386/vmlinux.lds -e stext arch/i386/kernel/head.o arch/i386/kernel/init_task.o init/main.o init/version.o init/do_mounts.o \
--start-group \
arch/i386/kernel/kernel.o arch/i386/mm/mm.o kernel/kernel.o mm/mm.o fs/fs.o ipc/ipc.o \
drivers/acpi/acpi.o drivers/parport/driver.o drivers/char/char.o drivers/block/block.o drivers/misc/misc.o drivers/net/net.o drivers/char/agp/agp.o drivers/char/drm/drm.o drivers/ide/idedriver.o drivers/cdrom/driver.o drivers/pci/driver.o drivers/video/video.o drivers/media/media.o \
net/network.o \
/usr/src/linux-2.4.20/arch/i386/lib/lib.a /usr/src/linux-2.4.20/lib/lib.a /usr/src/linux-2.4.20/arch/i386/lib/lib.a \
--end-group \
-o vmlinux
net/network.o: In function `rtnetlink_rcv':
net/network.o(.text+0xd5f7): undefined reference to `rtnetlink_rcv_skb'
make: *** [vmlinux] Ошибка 1
Цитата:

насколько я помню там не make install
Сделал по прочитанному :) А в чем разница между make install и make install-no-fixedincludes?
ruslandh
Цитата:

В больинстве мне известных просто есть механизм смены текущего gcc c одной версии на другую
Чуть подробнее можно эту тему раскрыть? А то изобретаю велосипед, когда уже все придумано до нас! :)

Zur0 23-05-2003 16:14 76414

Ну ошибка похоже не при компиляции, а при ликовании...
Цитата:

А в чем разница между make install и make install-no-fixedincludes?
при выполнении make install-no-fixedincludes, не запускается скрипт fixedincludes,
который проверяет какие системные библиотеки пора обновить. Проблема в том, что эти хедыры, могут быть не совместимы с версий glibc, которая установлена на компе, а результат тому -- глюки. :gigi:
Цитата:

Сделал по прочитанному
На заборах, и не то пишут. Не бось для версии 3.2 прочитал? Советую брать CVS версию LFSBook'a, так как она лучше отображает положение дел (например многие патчи уже не нужны).

ruslandh 23-05-2003 21:27 76415

SirHenry
Я просто не знаю как смена версии gcc организована в вашем дистрибутиве :(

Zur0 24-05-2003 07:46 76416

Дык вроде механизм смены один: gcc -V <version>.
Если ядро компилить, то Makefile править надо...
SirHenry
Кстати какую последовательность комманд, для компиляции вводите?


ruslandh 25-05-2003 23:44 76417

Zur0
Ну тут Вы ошибаетесь - это только часть, что надо сделать для смены версии gcc. Привиду лог скрипта select-gcc (для примера) :

Setting up automatic selection of i586-alt-linux-cpp.
Checking available versions of i586-alt-linux-cpp, updating links in /etc/altern
atives ...
(You may modify the symlinks there yourself if desired - see `man ln'.)
Updating i586-alt-linux-cpp (/usr/bin/i586-alt-linux-cpp) to point to /usr/bin/i
586-alt-linux-cpp-3.2.
Leaving cpp.1.bz2 (/usr/share/man/man1/cpp.1.bz2) pointing to /usr/share/man/man
1/cpp-3.2.1.bz2.

Setting up automatic selection of gcc.
Checking available versions of gcc, updating links in /etc/alternatives ...
(You may modify the symlinks there yourself if desired - see `man ln'.)
Updating gcc (/usr/bin/gcc) to point to /usr/bin/colorifer.
Leaving g77 (/usr/bin/g77) pointing to /usr/bin/colorifer.
Leaving gcj (/usr/bin/gcj) pointing to /usr/bin/colorifer.
Leaving g++ (/usr/bin/g++) pointing to /usr/bin/colorifer.

Setting up automatic selection of i586-alt-linux-gcc.
Checking available versions of i586-alt-linux-gcc, updating links in /etc/altern
atives ...
(You may modify the symlinks there yourself if desired - see `man ln'.)
Updating i586-alt-linux-gcc (/usr/bin/i586-alt-linux-gcc) to point to /usr/bin/i
586-alt-linux-gcc-3.2.
Leaving i586-alt-linux-gcov (/usr/bin/i586-alt-linux-gcov) pointing to /usr/bini586-alt-linux-gcov-3.2.
Leaving gcc.1.bz2 (/usr/share/man/man1/gcc.1.bz2) pointing to /usr/share/man/ma1/gcc-3.2.1.bz2.
Leaving i586-alt-linux-unprotoize (/usr/bin/i586-alt-linux-unprotoize) pointingto /usr/bin/i586-alt-linux-unprotoize-3.2.
Leaving i586-alt-linux-protoize (/usr/bin/i586-alt-linux-protoize) pointing to usr/bin/i586-alt-linux-protoize-3.2.
Leaving gcov.1.bz2 (/usr/share/man/man1/gcov.1.bz2) pointing to /usr/share/man/an1/gcov-3.2.1.bz2.

Setting up automatic selection of i586-alt-linux-g++.
Checking available versions of i586-alt-linux-g++, updating links in /etc/alteratives ...
(You may modify the symlinks there yourself if desired - see `man ln'.)
Updating i586-alt-linux-g++ (/usr/bin/i586-alt-linux-g++) to point to /usr/bin/586-alt-linux-g++-3.2.
Leaving i586-alt-linux-c++filt (/usr/bin/i586-alt-linux-c++filt) pointing to /ur/bin/i586-alt-linux-c++filt-3.2.
Leaving g++.1.bz2 (/usr/share/man/man1/g++.1.bz2) pointing to /usr/share/man/ma1/gcc-3.2.1.bz2.


Zur0 26-05-2003 05:03 76418

ruslandh
Ну я имел ввиду, что для ядра можно Makefile поправить и компилить с любым gcc.

SirHenry 26-05-2003 08:17 76419

Zur0
Цитата:

Ну ошибка похоже не при компиляции, а при ликовании...
А как бороться то с ней?
Цитата:

Не бось для версии 3.2 прочитал?
Ага, точно. Просто она по-русски писана :gigi: Про патчи пропустил, сразу за сборку взялся.
Что-то мне все больше кажется, что сначала нужно было откомпилить и поставить binutils-2.13.2.1, glibc-2.3.2, а уж потом обновлять сам gcc до v.3.3.... *Кстати, binutils не компилятся тоже - вылетают с ошибкой.
Цитата:

Кстати какую последовательность комманд, для компиляции вводите?
Компиляции ведра? Ну там все банально: make dep clean&&make bzImage&&make modules&&make modules_install.
.config не новый, настроенный и обкатанный....

ruslandh
Цитата:

Я просто не знаю как смена версии gcc организована в вашем дистрибутиве
Но ведь есть наверняка какие то рекомендации или описания общего характера, не привязанные к конкретным дистрибутивам?

Zur0 26-05-2003 19:37 76420

Цитата:

А как бороться то с ней?
Ну начнем стого, что стоит правильно устоновит gcc, а коли include подпортили то glibc + kernel-headers, судя по всему.
Если не поможет то переставить binutils (там как раз линкер и находится)

Кстати разработчики ядра советуеют его компилить c gcc-2.95.3 :gigi:

А дистрибутив это секрет? :o

SirHenry 27-05-2003 10:24 76421

Zur0
Цитата:

А дистрибутив это секрет?
Ни в коем случае! Дистрибутив - RedHat7.2

Нда... Опыт сын ошибок трудных (с) ;)


[s]Исправлено: SirHenry, 12:12 28-05-2003[/s]

ooptimum 27-05-2003 16:15 76422

ruslandh
Цитата:

PS Интересно - а в каком "живом" дистрибутиве ядро собрано на gcc 3.x ?
SuSE 8.2

SirHenry 28-05-2003 11:44 76423

Zur0
Переставил RedHat7.2 (уже прсто экперимента ради :) ), обновил сразу же binutils до 2.13.2.1 и поставил gcc-3.3 (конфигурил с ключами ./configure --prefix=/usr --enable-shared --enable-threads=posix --with-system-zlib --enable-__cxa_atexit&&make bootstrap 2>&1 |tee /gcc.log. Потом решил взяться за glibc-2.3.2, но при ./configure --prefix=/usr --disable-profile --enable-add-ons --libexecdir=/usr/bin --libdir=/usr/lib
вылезает ошибка configure:1350: error: you must configure in a separate build directory... В INSTALL'e написанно, что нужно создать некую директорию для "...to put the object files in".... Как обойти это ошибку? (млин, дурацкий вопрос получился...).
И еще вопрос: после обновления glibc нужно будет пересобирать gcc *(т.к. компилятор собирался со старыми glibc) или нет?
ЗЫЖ а при make bzImage все таже ошибка вылезает. Попробовал еще пересобирать xmms, util-linux-2.11z, mc - никаких проблем.... Странно все это :)

Zur0 & ruslandh
спасибо за советы :oszone:

[s]Исправлено: SirHenry, 12:58 28-05-2003[/s]

Zur0 28-05-2003 17:20 76424

SirHenry
glibc советуют собирать так:
1. Извлекаем исходники (например в /usr/src)
3. Извлекаем add-on (glibc-linuxthreads-2.3.2.bz2) в glibc-2.3.2/
2. Создаем катаог glibc-build и заходим в него
3. из этого каталока запускаем configure и make
Код:


Команды:
# cd /usr/src &&
> tar xjpf glibc-2.3.2.tar.bz2 &&
> tar xjpf glibc-linuxthreads-2.3.2.tar.bz2 &&
> mv linuxthrads* glibc-2.3.2/ &&
> mkdir glibc-build &&
> cd glibc-build &&
> ../glibc-2.3.2/configure --prefix=/usr --enable-add-ons \
> --disable-profile --libexecdir=/usr/bin *&&
> make "так не помню нужны ли параметры, LFSBook в зубы :gigi:"
> make install -- как-нибудь

По поводу ядра

Попробуй взять исходники посвежее (2.4.21-rc3 например),
или заюзать из дистрибутива (или наоборот с kernel.org)

ruslandh 29-05-2003 00:21 76425

SirHenry
1 Похоже, надо строить в какой-то отдельной директории, а результаты (объектные файлы) должны создаваться в другой дтректории (не системной)(возможно для того, что-бы они не путались с одноименными системными файлами ? )
2 А не легче сорец создать ? - Написать (или взять откуда-нибудь) файл с расширением .spec и забацать свой сорец и бинарник ?

SirHenry 29-05-2003 12:56 76426

Zur0
Цитата:

Попробуй взять исходники посвежее (2.4.21-rc3 например)
Стянул rc6 (последний раз, когда я там был, 2-й был последним) и вуа-ля:
<..откушено..>
tools/build -b bbootsect bsetup compressed/bvmlinux.out CURRENT > bzImage
Root device is (3, 3)
Boot sector 512 bytes.
Setup is 4781 bytes.
System is 1130 kB
warning: kernel is too big for standalone boot from floppy
make[1]: Выход из каталог`/usr/src/linux-2.4.20/arch/i386/boot
все собралось как из пушки. Вроде даже без error'ов :)

ruslandh
Цитата:

А не легче сорец создать ?
Этого я еще не умею... пока что :shuffle: *потому предпочитаю действовать по знакомой схеме: configure/make/make install

Теперь осталось только попробовать glibc обновить и посмотреть, что из этого выйдет. Надеюсь, что систему после этого эксперимента переставлять не придется :)
ЗЫЖ Еще пара вопросов:
1. после обновления glibc нужно будет пересобирать gcc или можно забыть про это?
2. какие программы из жизненно необходимых могут потребовать пересборки после обновления glibc?


[s]Исправлено: SirHenry, 14:04 29-05-2003[/s]

SandySandy 29-05-2003 13:41 76427

После установки glibc надо обновлять базовый набор всех программ, они же все завязаны на glibc. Особенно при смене порядка версии. Читай опять же LFS. Думаешь зря они компилят проги типа ls и т.д. сначало статически а потом привязывая к glibc?
Просто у меня к примеру когда я в свое время (был знаком с линуксом очень мало и обновлял все что мог считая все старым и вытягивая самое свежее из инета ) захотел поставить glibc и облом после установки, ни одна программа не запустилась требуя библиотеки старого glibc, вот это тогда я потом врубился )), запускался один ldconfig.
Это как круговой цикл, ставь glibc в отдельный каталог, компилируй проги с указанием на него и т.д.

Добавлено:

к примеру RedHat ведь не выпускает rpm пакеты нового glibc для старых дистров. Так ведь?
Следствие .. узнаешь сам после установки :))

Добавлено:

а gcc пофигу какой glibc, главное чтобы он был.
У меня тоже стоит 3.3 и тоже когда пытался скомпилить ядро версии rc2 то вываливалась аналогичная ошибка, но разбираться с ней не стал... так как необходимость нового ядра была лишь теоретическая, хотел проверить работу acpi новой платы.
Хм... быстро же работают уже rc6 лежит, даже незаметил предыдущих версий, ;) наверняка из за ошибок с компиляцией, точно в июле и новый stable выйдет!!

SirHenry 02-06-2003 11:51 76428

2 ruslandh Zur0 SandySandy
Большое спасибо за советы - все вродь как получилось :)

Galilley 12-06-2003 22:28 76429

glibc-2.3.x и glibc-2.2.х друг с другом не совместимы... По крайней мере при установке gcc из пакета, требуется сначала обновить glibc, а после установки пересобрать ещё пол дистра уже новым gcc (относится к qt-приложениям).


Время: 19:42.

Время: 19:42.
© OSzone.net 2001-