您的位置:首页 > 其它

GCC不同版本的编译方法

2008-03-02 15:49 363 查看
l GCC3.2以下的版本编译方法
1. Kernel headers setup
在编译Glibc时用到
2. Binary utilities setup
这部分在哪里安装都可以,没有用到内核头文件
3. Bootstrap compiler setup
编译参数:
../gcc-2.95.3/configure --target=$TARGET --prefix=${PREFIX} /
--without-headers --with-newlib --enable-languages=c
第一遍gcc只编译了c语言部分,是因为编译glibc只需要c语言就行了,你当然也可以编译其它的语言支持,但没有什么意义,因为第一遍的gcc会被第二遍替换掉,而且第一遍是依赖于主系统glibc的,所以在chroot后就不能用了。
在CLFS2.0里没有chroot的过程,所以无论是工具链中的第一遍还是第二遍编译,gcc所依赖的glibc都是主系统的glibc,但对后面的编译并不造成影响。
4. C library setup
5. Full compiler setup
支持C、C++,Java等
Gcc被编译两次,因为一些编程语言比如C++,需要glibc的支持
l GCC3.2以上的版本编译方法
1. Binary utilities setup
2. Glibc的headers部分安装
编译参数:
$ CC=gcc ../glibc-2.4/configure --prefix=/usr /
--host=${CLFS_TARGET} --build=${CLFS_HOST} /
--with-headers=${CLFS}/usr/include --cache-file=config.cache
gcc用的是主系统的gcc,这里需要注意的是--prefix=/usr虽然指定的是/usr目录,但实际上最后安装到的是${install_root}/usr下。Host指定glibc运行所在的目标体系。
安装:
$ make install-headers
我们还不需要一个完整的glibc,其实也无法进行编译的,因为目前的交叉编译用的GCC还没有,所以是无法编译的,但编译一个交叉编译的GCC又必须要一组C库的头文件,好在安装目标平台的glibc的头文件并不需要交叉编译器,所以这里直接安装头文件即可。
3. GCC第一次交叉编译
编译参数:
../gcc-4.1.1/configure --prefix=${CLFS}/cross-tools /
--host=${CLFS_HOST} --target=${CLFS_TARGET} --disable-multilib /
--with-sysroot=${CLFS} --disable-nls --disable-shared /
--enable-languages=c
第一遍编译的gcc就是交叉版本的gcc。--with-sysroot目的是让这个gcc在编译的时候默认到{--with-sysroot}/usr/include下找内核和库头文件。
4. Glibc完全安装
编译参数:
BUILD_CC="gcc" CC="${CLFS_TARGET}-gcc" /
AR="${CLFS_TARGET}-ar" RANLIB="${CLFS_TARGET}-ranlib" /
../glibc-2.4/configure --prefix=/usr --libexecdir=/usr/lib/glibc /
--host=${CLFS_TARGET} --build=${CLFS_HOST} /
--disable-profile --enable-add-ons /
--with-tls --enable-kernel=2.6.0 --with-__thread /
--with-binutils=${CLFS}/cross-tools/bin --with-headers=${CLFS}/usr/include /
--cache-file=config.cache
开始编译目标体系平台下的glibc了,这个时候交叉版本的binutils和第一次编译的gcc都用上了。
5. GCC第二次交叉编译
../gcc-4.1.1/configure --prefix=${CLFS}/cross-tools /
--host=${CLFS_HOST} --target=${CLFS_TARGET} --disable-multilib /
--with-sysroot=${CLFS} --disable-nls --enable-shared /
--enable-languages=c,c++ --enable-__cxa_atexit /
--enable-c99 --enable-long-long --enable-threads=posix
析:工具链中gcc的第一次和第二次编译都是由主系统的gcc和binutils来完成。两次交叉编译后的Gcc都是交叉版本的gcc,所以不能用第一次的gcc来编译第二次的gcc,不然就第二次的gcc就不能在主系统上运行了。
只有在编译glibc的时候用到了交叉版本的binutils,其它部分的链接都是由主系统的binutils来完成的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: