Почему кросс-компиляция GCC не создает crti.о?
В попытке построить gcc 4.X. X cross compiler for arm, я застрял в отсутствующем файле crti.o
в подкаталоге $BUILD_DIR/gcc
.
An strace
на верхнем уровне Makefile
показывает, что скомпилированный xgcc
вызывает кросс-линкер ld
с "crti.o"
в качестве аргумента. Я предполагаю, что если кросс-линкинг ld
вызывается, то родной /usr/lib/crti.o
- это не то, что нужно.
Я вижу, что в дереве источников gcc имеется ряд потенциальных источников для объекта crti (включая $SRC_DIR/gcc/config/arm/crti.asm
).
Как я могу настроить сборку gcc, чтобы гарантировать, что этот файл собран (или опущен из команды ld
)?
Вот моя строка настройки:
/x-tools/build/gcc-4.5.0$ ../../src/gcc-4.5.0/configure --target=arm-linux --prefix=/opt/arm-tools --disable-threads --enable-languages=c
1 ответ:
Реальный ответ заключается в том, что он должен компилироваться
crti.o
Если кто-то должен был построить мишень для рук-эльфов. при построении целиarm-linux Людиgcc разумно предполагают, чтоglibc был скомпилирован ранее, и он обеспечит запускcrti.o
. Вполне разумно, Если вы обновляетесь.Создание новой корневой файловой системы-это другая история, парадоксальная (которая приходит первой glibc или gcc ?). Подход (одобрен, но я еще не преуспел в этом) заключается в создании автономного gcc (arm-elf \static, скажем), затем glibc, затем gcc снова.
Похоже, что некоторые обратились к отсутствующему
crti.o
в целиarm-linux путем модификацииgcc\config\arm\t-linux
. Вместо того, чтобы полагаться на несуществующий glibc, Клудж должен использовать arm-elf предоставленную версиюcrti.o
. Пример можно найти здесь .--- gcc-3.4.4/gcc/config/arm/t-linux 2003-09-20 17:09:07.000000000 -0400 +++ gcc-3.4.4.works/gcc/config/arm/t-linux 2005-05-25 20:44:07.000000000 -0400 @@ -18,3 +18,24 @@ # LIBGCC = stmp-multilib # INSTALL_LIBGCC = install-multilib + +EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crti.o crtn.o + +# If EXTRA_MULTILIB_PARTS is not defined above then define EXTRA_PARTS here +# EXTRA_PARTS = crtbegin.o crtend.o crti.o crtn.o + +LIBGCC = stmp-multilib +INSTALL_LIBGCC = install-multilib + +# Assemble startup files. +$(T)crti.o: $(srcdir)/config/arm/crti.asm $(GCC_PASSES) + $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \ + -c -o $(T)crti.o -x assembler-with-cpp $(srcdir)/config/arm/crti.asm + +$(T)crtn.o: $(srcdir)/config/arm/crtn.asm $(GCC_PASSES) + $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \ + -c -o $(T)crtn.o -x assembler-with-cpp $(srcdir)/config/arm/crtn.asm + +# Disable libc link + +SHLIB_LC =