2014-01-26 3 views
1

Я строю перекрестную цепочку uClibc i486 для встроенной системы. Набор инструментов построен на Debian свистящих (x86-64) и состоит из следующих компонентов:Неверная сборка инструментальных цепей

  • Binutils 2.24
  • GCC 4.7.3
  • Linux 3.2.54
  • uClibc 0.9.33.2
  • GMP 5.1.3
  • MPFR 3.1.2
  • MPC 1.0.2

Эти шаги используются для создания набора инструментов:

Установка Linux 3.2.54 заголовки

make mrproper 
make \ 
    ARCH=x86 \ 
    INSTALL_HDR_PATH=/home/build-user/toolchain/i486-linux-uclibc \ 
    headers_install 

Этот этап успешно завершен.

Построить Binutils 2.24

Binutils построен в отдельном каталоге, как указано в документации.

./configure \ 
    --prefix=/home/build-user/toolchain/ \ 
    --target=i486-linux-uclibc 
    --with-sysroot=/home/build-user/toolchain/i486-linux-uclibc \ 
    --with-lib-path=/home/build-user/toolchain/i486-linux-uclibc/lib \ 
    --disable-nls \ 
    --disable-multilib 

    make configure-host 
    make 
    make install 

Этот шаг успешно завершен.

Сложение GMP 5.1.3

./configure \ 
    --prefix=/home/build-user/toolchain/gmp \ 
    --disable-shared \ 
    --enable-static 

    make 
    make install 

Этот этап успешно завершен.

Сложение MPFR 3.1.2

./configure \ 
    --prefix=/home/build-user/toolchain/mpfr \ 
    --with-gmp=/home/build-user/toolchain/gmp \ 
    --disable-shared \ 
    --enable-static 

    make 
    make install 

Этот этап успешно завершен.

Сложение MPC 1.0.2

./configure \ 
    --prefix=/home/build-user/toolchain/mpc \ 
    --with-gmp=/home/build-user/toolchain/gmp \ 
    --with-mpfr=/home/build-user/toolchain/mpfr \ 
    --disable-shared \ 
    --enable-static 

    make 
    make install 

Этот этап успешно завершен.

Построить статическую GCC 4.7.3

НКУ построен в отдельном каталоге, как указано в документации.

./configure \ 
    --prefix=/home/build-user/toolchain \ 
    --target=i486-linux-uclibc \ 
    --with-arch=i486 \ 
    --with-sysroot=/home/build-user/toolchain/i486-linux-uclibc \ 
    --disable-multiarch \ 
    --disable-nls \ 
    --disable-shared \ 
    --without-headers \ 
    --with-newlib \ 
    --disable-decimal-float \ 
    --disable-libgomp \ 
    --disable-libmudflap \ 
    --disable-libssp \ 
    --disable-libquadmath \ 
    --disable-threads \ 
    --enable-languages=c \ 
    --disable-multilib \ 
    --with-gmp=/home/build-user/toolchain/gmp \ 
    --with-mpfr=/home/build-user/toolchain/mpfr \ 
    --with-mpc=/home/build-user/toolchain/mpc 

    make all-gcc all-target-libgcc 
    make install-gcc install-target-libgcc 

Этот шаг успешно завершен.

Построение uClibc 0.9.33.2

Файл конфигурации для uClibc по умолчанию со следующими опциями включено:

TARGET_i386 = у
CONFIG_486 = у

UCLIBC_HAS_FENV = у
LINUXTHREADS_OLD = у

make \ 
    ARCH=x86 \ 
    DESTDIR=/home/build-user/toolchain/i486-linux-uclibc \ 
    CROSS=i486-linux-uclibc- \ 
    RUNTIME_PREFIX=/ \ 
    DEVEL_PREFIX=/ \ 
    KERNEL_HEADERS=/home/build-user/toolchain/i486-linux-uclibc/include \ 
    install 

Этот шаг успешно завершен.

построить окончательный GCC 4.7.3

НКУ построен в отдельном каталоге, как указано в документации.

./configure \ 
    --prefix=/home/build-user/toolchain \ 
    --target=i486-linux-uclibc \ 
    --with-arch=i486 \ 
    --with-sysroot=/home/build-user/toolchain/i486-linux-uclibc \ 
    --with-native-system-header-dir=/include \ 
    --disable-multiarch \ 
    --disable-nls \ 
    --enable-libssp \ 
    --enable-c99 \ 
    --disable-libgomp \ 
    --enable-long-long \ 
    --disable-libmudflap \ 
    --enable-languages=c \ 
    --disable-multilib \ 
    --with-gmp=/home/build-user/toolchain/gmp \ 
    --with-mpfr=/home/build-user/toolchain/mpfr \ 
    --with-mpc=/home/build-user/toolchain/mpc 

    make 

Этого шаг терпит неудачу со следующими ошибками:

/bin/bash /home/build-user/toolchain/packages/gcc-4.7.3/libgcc/../mkinstalldirs . 
/home/build-user/toolchain/gcc-final-build/./gcc/xgcc -B/home/build-user/toolchain/gcc-final-build/./gcc/ -B/home/build-user/toolchain/i486-linux-uclibc/bin/ -B/home/build-user/toolchain/i486-linux-uclibc/lib/ -isystem /home/build-user/toolchain/i486-linux-uclibc/include -isystem /home/build-user/toolchain/i486-linux-uclibc/sys-include -O2 -g -O2 -DIN_GCC -DCROSS_DIRECTORY_STRUCTURE -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -isystem ./include -fpic -g -DIN_LIBGCC2 -fbuilding-libgcc -fno-stack-protector -shared -nodefaultlibs -Wl,--soname=libgcc_s.so.1 -Wl,--version-script=libgcc.map -o ./libgcc_s.so.1.tmp -g -O2 -B./ _muldi3_s.o _negdi2_s.o _lshrdi3_s.o _ashldi3_s.o _ashrdi3_s.o _cmpdi2_s.o _ucmpdi2_s.o _clear_cache_s.o _trampoline_s.o __main_s.o _absvsi2_s.o _absvdi2_s.o _addvsi3_s.o _addvdi3_s.o _subvsi3_s.o _subvdi3_s.o _mulvsi3_s.o _mulvdi3_s.o _negvsi2_s.o _negvdi2_s.o _ctors_s.o _ffssi2_s.o _ffsdi2_s.o _clz_s.o _clzsi2_s.o _clzdi2_s.o _ctzsi2_s.o _ctzdi2_s.o _popcount_tab_s.o _popcountsi2_s.o _popcountdi2_s.o _paritysi2_s.o _paritydi2_s.o _powisf2_s.o _powidf2_s.o _powixf2_s.o _powitf2_s.o _mulsc3_s.o _muldc3_s.o _mulxc3_s.o _multc3_s.o _divsc3_s.o _divdc3_s.o _divxc3_s.o _divtc3_s.o _bswapsi2_s.o _bswapdi2_s.o _clrsbsi2_s.o _clrsbdi2_s.o _fixunssfsi_s.o _fixunsdfsi_s.o _fixunsxfsi_s.o _fixsfdi_s.o _fixdfdi_s.o _fixxfdi_s.o _fixunssfdi_s.o _fixunsdfdi_s.o _fixunsxfdi_s.o _floatdisf_s.o _floatdidf_s.o _floatdixf_s.o _floatundisf_s.o _floatundidf_s.o _floatundixf_s.o _divdi3_s.o _moddi3_s.o _udivdi3_s.o _umoddi3_s.o _udiv_w_sdiv_s.o _udivmoddi4_s.o tf-signs_s.o addtf3_s.o divtf3_s.o eqtf2_s.o getf2_s.o letf2_s.o multf3_s.o negtf2_s.o subtf3_s.o unordtf2_s.o fixtfsi_s.o fixunstfsi_s.o floatsitf_s.o floatunsitf_s.o fixtfdi_s.o fixunstfdi_s.o floatditf_s.o floatunditf_s.o extendsftf2_s.o extenddftf2_s.o extendxftf2_s.o trunctfsf2_s.o trunctfdf2_s.o trunctfxf2_s.o enable-execute-stack_s.o unwind-dw2_s.o unwind-dw2-fde-dip_s.o unwind-sjlj_s.o unwind-c_s.o emutls_s.o libgcc.a -lc && rm -f ./libgcc_s.so && if [ -f ./libgcc_s.so.1 ]; then mv -f ./libgcc_s.so.1 ./libgcc_s.so.1.backup; else true; fi && mv ./libgcc_s.so.1.tmp ./libgcc_s.so.1 && ln -s libgcc_s.so.1 ./libgcc_s.so 
/home/build-user/toolchain/i486-linux-uclibc/bin/ld: cannot find /lib/libc.so.0 
/home/build-user/toolchain/i486-linux-uclibc/bin/ld: cannot find /lib/uclibc_nonshared.a 
/home/build-user/toolchain/i486-linux-uclibc/bin/ld: cannot find /lib/ld-uClibc.so.0 
collect2: error: ld returned 1 exit status 
make[2]: *** [libgcc_s.so] Error 1 
make[2]: Leaving directory `/home/build-user/toolchain/gcc-final-build/i486-linux-uclibc/libgcc' 
make[1]: *** [all-target-libgcc] Error 2 
make[1]: Leaving directory `/home/build-user/toolchain/gcc-final-build' 
make: *** [all] Error 2 

проверяет поиск линкера путь:

/home/build-user/toolchain/i486-linux-uclibc/bin/ld --verbose | grep SEARCH_DIR 

SEARCH_DIR("/home/build-user/toolchain/i486-linux-uclibc/lib"); 

Путь правильно, поэтому я искать якобы отсутствует файлов в каталоге:

find /home/build-user/toolchain/i486-linux-uclibc/lib \(-name libc.so.0 -o -name uclibc_nonshared.a -o -name ld-uClibc.so.0 \) 

/home/build-user/toolchain/i486-linux-uclibc/lib/uclibc_nonshared.a 
/home/build-user/toolchain/i486-linux-uclibc/lib/ld-uClibc.so.0 
/home/build-user/toolchain/i486-linux-uclibc/lib/libc.so.0 

Все файлы находятся в каталоге.

Может ли кто-нибудь сказать мне, что я делаю неправильно?

+0

Поскольку у вас есть цель i486 на хосте x86-64, разве вы не можете просто скомпилировать с помощью 'gcc -m32 -march = i486'? Кроме того, если вы занимаетесь созданием инструментальной цепочки, выберите более новую версию GCC, например. [GCC 4.8] (http://gcc.gnu.org/gcc-4.8/) –

+0

Если я скомпилирован с 'gcc -m32 -march = i486', двоичные файлы будут связаны с библиотекой хоста вместо uClibc. GCC 4.8 использует C++ в качестве языка его реализации, и я предпочитаю не устанавливать компилятор C++ для построения компилятора C. – user3236649

ответ

0

Это предположение, но когда я создаю перекрестные компиляторы GCC, я использую sysroot, равный префиксу. Это создает специальную конфигурацию для binutils и GCC, которые могут вам помочь.

+0

Когда sysroot и prefix равны, сборка завершается успешно. Проблема возникает, когда sysroot и target одинаковы, поэтому, если я выбираю любую директорию, отличную от цели, все строит правильно. Мне также нужно отключить libquadmath, но это еще одна не связанная с этим проблема. – user3236649

Смежные вопросы