Реальный ответ заключается в том, что он должен скомпилировать crti.o
, если нужно построить цель с эльфом. При создании руки -linux target, пользователи gcc обоснованно полагают, что glibc был скомпилирован ранее, и он обеспечит запуск crti.o
. Совершенно разумно, , если вы обновляете .
Создание новой корневой файловой системы - это еще одна история, парадоксальная в этом отношении (которая идет первой: glibc или gcc ?). Подход (одобрен, но я пока не преуспел) заключается в создании автономного gcc ( arm-elf \ static, скажем), затем glibc , затем gcc снова.
Кажется, что некоторые исправили потерянную crti.o
в цели arm-linux путем модификации gcc\config\arm\t-linux
. Вместо того чтобы полагаться на несуществующий glibc , kludge должен использовать предоставленную 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 =