食物在胃里多久消化:[原创]自己动手制作交叉编译工具链(5)

来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 14:55:23

第四步 编译Glibc

http://oss.ustc.edu.cn/gnu/glibc/glibc-2.9.tar.bz2

http://ftp.cross-lfs.org/pub/clfs/conglomeration/glibc/glibc-ports-2.9.tar.bz2

Glibc也就是C库函数,包括分配内存、搜索目录、打开和关闭文件、读和写文件、字符串操作、模式匹配、代数运算等。 libc-ports软件包的作用是移植,把Glibc库移植到ARM平台时需要它,解压后拷贝到glibc目录,并命名为 ports,就可以了:

mv ${PACKAGE_GLIBCPORTS} ${PACKAGE_GLIBC}/ports

编译完成需要时间大概为:1.5小时

配置选项

为了使Glibc支持NPTL,需要在Glibc编译目录下建立config.cache文件并写入:

cat > config.cache << EOF

libc_cv_forced_unwind=yes

libc_cv_c_cleanup=yes

libc_cv_arm_tls=yes

libc_cv_gnu99_inline=yes

EOF

其中 libc_cv_arm_tls=yes 可以省略,因为交叉编译环境已经完全了解你要编译的目标体系,所以可以自行检测出来。

BUILD_CC=gcc \

CC=${TARGET}-gcc \

AR=${TARGET}-ar \

RANLIB=${TARGET}-ranlib \

${SOURCE_DIR}/${PACKAGE_GLIBC}/configure \

   --build=${HOST} \

   --host=${TARGET} \

   --target=${TARGET} \

   --prefix="/usr" \

   --with-headers=${TARGET_PREFIX}/include \

   --with-binutils=${RESULT_DIR}/bin \

   --with-tls \

   --with-__thread \

   --enable-sim \

   --enable-nptl \

   --enable-add-ons \

   --enable-kernel=2.6.29 \

   --disable-profile \

   --without-gd \

   --without-cvs \

   --cache-file=config.cache

make

make install_root=${TARGET_PREFIX} prefix="" install

选项详解

BUILD_CC="gcc"

Glibc在编译过程中需要先创建一些工具,这些工具需要用主机上的GCC来编译。

CC=${TARGET}-gcc

告诉Glibc使用我们在上一步为ARM目标平台创建的交叉编译器GCC来编译C库。

AR=${TARGET}-ar \

告诉Glibc使用我们在上一步为ARM目标平台创建的ar来汇编C库。

RANLIB=${TARGET}-ranlib

告诉Glibc使用我们在上一步为ARM目标平台创建的ranlib

-with-headers=${TARGET_PREFIX}/include \

   --with-binutils=${RESULT_DIR}/bin

This tells Glibc to use the Binutils that are specific to our target architecture.

   --with-tls

This tells Glibc to use Thread Local Storage.

   --with-__thread

This tells Glibc to use use the __thread for libc and libpthread builds.

   --enable-sim \

   --enable-nptl \

   --enable-add-ons

This tells Glibc to utilize all add-ons that are available.

   --enable-kernel=2.6.29 \

   --disable-profile

This builds the libraries without profiling information. Omit this option if profiling on the temporary tools is necessary.

   --without-gd \

   --without-cvs \

   --cache-file=config.cache

This tells Glibc to utilize a premade cache file.

对 prefix 的解释

对 libc.so 的修正·

rm ${TARGET_PREFIX}/lib/libc.so

cat > ${TARGET_PREFIX}/lib/libc.so << "EOF"

/* GNU ld script

    Use the shared library, but some functions are only in

    the static library, so try that secondarily. */

OUTPUT_FORMAT(elf32-littlearm)

GROUP ( libc.so.6 libc_nonshared.a AS_NEEDED ( ld-linux.so.3 ) )

EOF

make install 后得到的文件:(待完善)