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来完成的。
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来完成的。
相关文章推荐
- gcc编译静态库到自己的程序 解决在不同linux下因libc版本问题而不能运行
- wxSqlite3的GCC版本编译方法
- 关于 QWidget+Qml程序打包到ubuntu时,程序与系统库版本不同,编译时添加并依赖自带库 的方法
- 解决.net framework 4.0环境下遇到版本不同编译不通过的方法详解
- 不同版本gcc编译编译相同kernel source code 的问题
- 编译不同版本Android源码,切换gcc和jdk
- gcc版本不同导致的编译错误?
- 编译.NET程序自动产生不同的版本号的方法
- 基于MTK平台的不同安卓版本软件编译的JDK版本GCC版本切换脚本
- UE4 不同版本编译常见错误及解决方法
- GCC的DEBUG和release版本编译方法
- Linux下不同用户使用不同版本gcc的方法
- linux下安装两个不同版本的交叉编译环境arm-linux-gcc4.4.3、arm-linux-gcc3.4.1,切换调用的解决
- 解决.net framework 4.0环境下遇到版本不同编译不通过的方法详解
- Linux系统平台下关于GCC编译及使用的方法 (-Werror,它要求GCC将所有的警告当成错误进行处理
- 关于编译gcc-4.5.0报错undefined reference to `__cxa_call_unexpected'的解决方法
- 从堆栈布局看gcc不同版本的优化
- gcc 多源文件的编译方法
- CentOS 6编译升级gcc清晰简易教程(可通用大部分Linux版本)
- Android StatusBar 透明化方法(不同的版本适配)