LINUX.ORG.RU

Консультация по установке компилятора gcc из исходников под Linux


0

1

Мне необходима консультация по установке компилятора gcc из исходников (tar'ника, скаченного из официального репозитория). Читал мануалы (официальные), просто статьи и т.д. Наверное руки кривые. Я понимаю, что сейчас многие скажут что из исходников собирать - куча проблем, ставь нормально с помощью PM и т.д. Но задача именно собрать из исходников компилятор gcc определённой версии под ОС Linux. Просто у меня задача в будущем будет стоять, собрать под определенную специфичную архитектуру и для этого я решил начать с простого. Просто попробовать собрать под обычным Linux, нужную мне версию gcc. Допустим такой case: Есть операционная система Ubuntu 11.10 установленная на вирутальную машину. Есть уже текущая версия gcc 4.6.1, вот что выведено в терминале, если запросить информацию gcc

gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/4.6.1/lto-wrapper
Target: i686-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.1-9ubuntu3' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++,go --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-plugin --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
Thread model: posix
gcc version 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3)
Тут всё банально и просто. Теперь у меня такая задача. Я скачал с офф ftp сервера, gcc версии 4.1.1: http://ftp.gnu.org/gnu/gcc/gcc-4.1.1/ файл gcc-4.1.1.tar.bz2 Распаковываю архив и вот что мне делать дальше, чтобы собрать под Ubuntu этот компилятор gcc 4.1.1, ну и чтобы он соответственно правильно работал? По идее надо делать стандартное:
./configure
make
make install (это как я понимаю не обязательно)
но я пробовал так устанавливать, пробовал флаги устанавливать в итоге компиляция заканчивалась ошибкам, причём различными. Снова читал http://gcc.gnu.org/install/ но видимо у меня очень плохо с англ и я не всё улавливаю. Вот поэтому я и пишу данный вопрос, хочу услышать как правильно это делать и желательно услышать от того, у кого это извращение (я думаю так многие считают) получилось успешно. Видимо нужно в configure определить как-то правильно флаги. Я думаю в этом ошибка + и конечно же мои кривые руки. Например, из языков мне нужен C, C++ и возможно Fortran, такие ЯП: как java, ada - не нужны, поэтому я думаю в ./configure можно эту указать. Надеюсь ответы будут без жесткого троллинга. Просто реальна нужна консультация (если лень писать, можно кинуть ссылку на manual, только на русском, англ я перевожу средне, могу какую-то неточность, из-за которой потом ничего не скомпилиться не уловить при чтении/переводе). Спасибо.

Распаковываешь исходники, находишь там файл INSTALL, просматриваешь (НЕ ПЕРЕВОДИШЬ!) и тупо вбиваешь все команды, какие встретишь в этом файле, в консоль. Профит. «Next->Next->Finish» Идеология в варианте Linux.

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

Вот, я для тебя все собрал в одном месте:

% mkdir objdir
% cd objdir
% srcdir/configure
% make BOOT_CFLAGS='-O' bootstrap
Делать это все надо, как ты сам понимаешь, в корневой директории, куда ты распаковал исходники. Для родной системы должно работать.

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

спасибо большое! Вот смотри. Я создал папку GCC, в неё скопировал tar'ник. Распаковал tar'ник и у меня в папке GCC появилась папка gcc-4.1.1, в которой все папки: config, boehm-gc, gcc, libstdc++-v3 и т.д. и файлы: configure, configure.in, README, COPYING, ну и т.д. Мне mkdir objdir делать в папке gcc-4.1.1 или GCC. И если я сделаю mkdir objdir и cd objdir в папке gcc-4.1.1, а потом сразу srcdir/configure, то ведь так не получится, потому я в папке objdir нахожусь... (извиняюсь что туплю возможно :( )

stcdir - это в моём случае gcc-4.1.1 так? Какая должна быть структура папок?

dnlfinder ()

[offtop]

Видимо нужно в configure определить как-то правильно флаги.

кстати посмотри их обязательно, собирал сегодня clang - он по умолчанию собирается с дебажными символами и без оптимизации, работать он и так будет конечно, но медленнее, может и в gcc так сделано
[/offtop]

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

После запуска: make BOOT_CFLAGS='-O' bootstrap через некоторое время ошибка:

 ........................................... ../../gcc/crtstuff.c:137: error: redefinition of parameter ‘__deregister_frame_info_bases’ ../../gcc/unwind-dw2-fde.h:108: error: previous definition of ‘__deregister_frame_info_bases’ was here ../../gcc/crtstuff.c:138: error: storage class specified for parameter ‘__do_global_ctors_1’ ../../gcc/crtstuff.c:141: error: storage class specified for parameter ‘_Jv_RegisterClasses’ ../../gcc/crtstuff.c:141: error: weak declaration of ‘_Jv_RegisterClasses’ must be public ../../gcc/crtstuff.c:146: error: storage class specified for parameter ‘func_ptr’ ../../gcc/crtstuff.c:184: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘__CTOR_LIST__’ ../../gcc/crtstuff.c:186: error: expected declaration specifiers before ‘;’ token ../../gcc/crtstuff.c:197: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘__DTOR_LIST__’ ../../gcc/crtstuff.c:199: error: expected declaration specifiers before ‘;’ token ../../gcc/crtstuff.c:215: error: storage class specified for parameter ‘__JCR_LIST__’ ../../gcc/crtstuff.c:215: error: parameter ‘__JCR_LIST__’ is initialized ../../gcc/crtstuff.c:215: error: section attribute not allowed for ‘__JCR_LIST__’ ../../gcc/crtstuff.c:215: error: alignment may not be specified for ‘__JCR_LIST__’ ../../gcc/crtstuff.c:215: error: empty scalar initializer ../../gcc/crtstuff.c:215: error: (near initialization for ‘__JCR_LIST__’) ../../gcc/crtstuff.c:229: error: storage class specified for parameter ‘__dso_handle’ ../../gcc/crtstuff.c:229: warning: ‘__visibility__’ attribute ignored ../../gcc/crtstuff.c:234: error: parameter ‘__dso_handle’ is initialized ../../gcc/crtstuff.c:234: error: redefinition of parameter ‘__dso_handle’ ../../gcc/crtstuff.c:229: error: previous definition of ‘__dso_handle’ was here ../../gcc/crtstuff.c:239: error: storage class specified for parameter ‘__cxa_finalize’ ../../gcc/crtstuff.c:239: error: weak declaration of ‘__cxa_finalize’ must be public ../../gcc/crtstuff.c:262: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token ../../gcc/crtstuff.c:305: error: expected declaration specifiers before ‘asm’ ../../gcc/crtstuff.c:319: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token ../../gcc/crtstuff.c:345: error: expected declaration specifiers before ‘asm’ ../../gcc/crtstuff.c:345: error: old-style parameter declarations in prototyped function definition ../../gcc/crtstuff.c:345: error: expected ‘{’ at end of input make[2]: *** [crtbegin.o] Error 1 make[2]: Leaving directory `/home/dan/GCC/gcc-4.1.1/objdir/gcc' make[1]: *** [stage1_build] Error 2 make[1]: Leaving directory `/home/dan/GCC/gcc-4.1.1/objdir/gcc' make: *** [bootstrap] Error 2 

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

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

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

Хотя без проведения экспериментов на реальном железе точнее сказать не смогу ничего. Слишком уж специфичная ошибка. А качать старый gcc и заводить свой арчик мне что-то в лом. Мой инет этого не выдержит.

delete83 ★★ ()

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

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