定制工具链构建失败
我正在为嵌入式系统构建uClibc i486交叉工具链。该工具链是建立在Debian喘息(X86-64),由以下部分组成:定制工具链构建失败
- 的Binutils 2.24
- GCC 4.7.3
- Linux的54年3月2日
- uClibc的0.9.33.2
- GMP 5.1.3
- MPFR 3.1.2
- MPC 1.0.2
这些步骤用于构建工具链:
安装Linux 54年2月3日头
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
GCC是建立在一个单独的目录,如文档中指定。
./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
此步骤已成功完成。
Build uClibc 0.9.33。2
为uClibc的配置文件是默认与以下选项启用:
TARGET_i386 = Y
CONFIG_486 = Y
UCLIBC_HAS_FENV = Y
LINUXTHREADS_OLD = Y
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
GCC是建立在一个单独的目录,如文档中指定。
./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
在目录中找到所有文件。
有人能告诉我我做错了什么吗?
这是一个猜测,但是当我构建GCC交叉编译器时,我使用等于前缀的sysroot。这为binutils和GCC创建了一个特殊的配置,可以帮助你。
当sysroot和前缀相等时,构建成功完成。当sysroot和target是相同的,所以如果我选择任何不同于目标的目录,一切都会正确建立。我也必须禁用libquadmath,但这是另一个无关的问题。 – user3236649
由于你在x86-64主机上有一个i486目标,你不能用'gcc -m32 -march = i486'编译吗?另外,如果您正在建立工具链,请选择较新版本的GCC,例如[GCC 4.8](http://gcc.gnu.org/gcc-4.8/) –
如果使用'gcc -m32 -march = i486'编译,二进制文件将与主库而不是uClibc链接。 GCC 4.8使用C++作为其实现语言,我不想安装C++编译器来构建C编译器。 – user3236649