2010-07-27 2 views
4

В попытке построить gcc 4.x.x кросс-компилятор для руки, я застрял в отсутствующем файле crti.o в подкаталоге $BUILD_DIR/gcc.Почему кросс-сборник GCC не строит `crti.o`?

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 
+0

У вас установлен glibc-devel? – SiggyF

+1

Да: но почему вы думаете, что это поможет? Вызывающий компоновщик является сшивающим агентом, поэтому использование собственной библиотеки загрузчика будет ... неправильным. – Jamie

ответ

4

Реальный ответ в том, что он должен компилировать crti.o, если один должен был построить руку эльфа цель. В построении руки Линукс цели, НКУ людей разумно предположить, что Glibc был составлен ранее, и это обеспечит crti.o запуска. Совершенно разумно, , если вы обновляете.

Создание новой корневой файловой системы является другая история, парадоксальный один в том, что (который приходит первый GLibC или GCC?). Подход (одобрен, но я пока еще не удалось с), чтобы построить автономный GCC (рука эльфа \ статические, скажем), затем Glibc, то GCC снова.

Кажется, что некоторые из них обратились недостающее crti.o в рычажного Linux мишени modfiying gcc\config\arm\t-linux. Вместо того, чтобы полагаться на неиспользуемый glibc, kludge должен использовать arm-elf, предоставленный вариант crti.o. Пример можно найти: here.

--- 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 =