Отсутствие crt1 и crti при кросс-компиляции - PullRequest
5 голосов
/ 21 июля 2010

Я пытаюсь создать кросс-компиляцию инструментария на основе GCC4.5 и newlib с включенной поддержкой gold и link-time-optimification. GCC компилируется нормально, но не генерирует файлы crt1.o или crti.o. Поэтому, когда я пытаюсь использовать компилятор для сборки Newlib, он жалуется на сообщение:

ld: error: cannot open crti.o: No such file or directory
ld: error: cannot open crtn.o: No such file or directory
ld: error: cannot find -lc

При поиске файлов с именем crt * в каталоге, где установлен GCC4.5, я получил следующий результат:

find ../../../tooltarget/ -name "crt*" -print #(result modified to consume less space)
crtprec80.o, crtend.o, crtfastmath.o, crtbegin.o, crtendS.o, crtprec32.o, crtbeginS.o, crtbeginT.o, crtprec64.o

Из спецификации GCC кажется, что gcc нужны оба файла crtbegin.o и crti.o, но доступен только один из них.

*startfile:                                       
%{!shared: %{pg|p|profile:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}}    crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o
%s;:crtbegin.o%s} 

Ниже приведены флаги, которые я использовал при компиляции GCC:

--prefix=${TTP}/usr         --build=x86_64-pc-linux-gnu
--host=x86_64-pc-linux-gnu  --target=x86_64-awn-linux-gnu
--with-gmp=${TTP}/usr       --with-mpc=${TTP}/usr
--with-mpfr=${TTP}/usr      --with-libelf=${TTP}/usr               
--enable-languages=c        --enable-lto                           
--disable-nls               --disable-shared                       
--disable-multilib          --disable-decimal-float                
--disable-libmudflap        --disable-libssp                       
--disable-libgomp           --disable-threads                      
--without-headers           --with-newlib                          
--with-build-sysroot=${TTP} --with-build-time-tools=${TTP}/usr/bin 

Я уверен, что это связано с тем, что я неправильно настроил GCC, или "вещи" просто так не работают, или файлы crti.o должны быть откуда-то еще.

Заранее спасибо

Аллан В. Нильсен

1 Ответ

1 голос
/ 01 января 2011

Некоторые crt* файлы поступают не из компилятора, а из библиотеки C.Я подозреваю, что это случай здесь для ваших crt1.o и crti.o.

...