LINUX.ORG.RU

Вопрос по правильной сборке GCC+GLibc, pass1

 ,


1

1

Здравствуйте.

Собираю тулчейн с самого первого этапа. Возникла проблема при сборке GLibc: компоновщик ругается на отсутствие библиотеки libgcc_s. Поскольку GCC с опцией --enable-shared=libgcc не хочет собираться, ругаясь на отсутствие libc, получается замкнутый круг: для сборки GLibc она требует libgcc_s.so.1, а чтобы её собрать, нужен libc. С опцией --disable-shared GCC собирается.

Привожу ключи для configure, с которыми собираю:

GCC-4.7.1: ../../src/gcc-4.7.1/configure --target=$TARGET \

--prefix=$TOOLS \

--with-sysroot=$SYSROOT \

--without-headers \

--with-newlib \ # причем это должно предоставить libc, но почему-то не делает и выдает ошибку при сборке libgcc_s

--with-local-prefix=$TOOLS \

--with-native-system-header-dir=$TOOLS/include \

--enable-shared=libgcc --disable-multilib --disable-threads \

--disable-nls --without-cloog --disable-libmudflap \

--disable-libquadmath --disable-libssp --disable-libgomp \

--disable-werror --disable-decimal-float \

--enable-languages=c \

--with-mpfr-include=$PWD/../../src/gcc-4.7.1/mpfr/src \

--with-mpfr-lib=$PWD/mpfr/src/.libs


GLibc-2.16.0: ../../src/glibc-2.16.0/configure --prefix=$TOOLS \

--with-headers=$TOOLS/include \

--enable-add-ons --enable-kernel=3.4.4 \

--build=$(../../src/glibc-2.16.0/scripts/config.guess) \

--disable-profile \

--host=$TARGET \

libc_cv_forced_unwind=yes \

libc_cv_ctors_header=yes \

libc_cv_c_cleanup=yes

Переменные: SYSROOT=/home/h3/newroot

TOOLS=$SYSROOT/tools

TARGET=i686-new-linux-gnu

PATH=$TOOLS/bin:$PATH
Подозреваю, для успешной сборки GLibc, не хватает какого-то ключа, вот только какого именно?


Кури lfs, там сначала как-то собирают gcc без шареных либ, затем им glibc, и, наконец, gcc с шареными либами.

anonymous
()

crosstool-ng

anonymous
()

Вобщем, решил не выпендриваться и выбрал более ранний релиз GCC, а именно, 4.6.3 (в доках GLibc рекомендуют собирать с GCC ветки 4.6). Далее, после пары-тройки ошибок компиляции (unresolved external __stack_chk_guard в resolv, отсутствие lgcc_s и lgcc_eh).

Первая ошибка уходит, если добавить при конфигурировании glibc опции: libc_cv_ssp=no, libc_cv_predef_stack_protector=no (gcc-pass1 собирается без ssp, защиты стека, видимо баг в configure-скрипте, раз он автоматом не определяет отсутствие libssp)

Поскольку libgcc_s.a и libgcc_eh.a не собрались при сборке GCC, сделал их симлинком на libgcc.a. Не уверен, что это корректно, но хотя бы сейчас заработало :)

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