你看一下CLFS就知道了,LFS也可以,但是LFS不强调交叉编译,所有看能看了之后体会不深。
如果是针对裸机的,其实可以连libc都不要,而且binutils和gcc都只需要编译一遍,一个例子是coreboot的交叉工具链,看看make crossgcc的过程就知道了。
针对Linux的话,根据CLFS的步骤,是这么做的:
1. cross binutils: 在HOST上运行,产生TARGET的二进制文件
2. cross gcc (static): 在HOST上运行,产生TARGET的二进制文件,不产生动态库,不使用TARGET平台的C库
3. glibc: TARGET平台的C库,用前两步构建的交叉工具链编译
4. cross gcc: 在HOST上运行,产生TARGET的二进制文件,交叉编译时使用上一步的glibc
这个时候已经可以构建出独立运行于TARGET的程序了,crosstool-ng之类的工具做到这里就完成任务了。对于CLFS,还要先构建一套工具,其中的binutils和gcc都是TARGET->TARGET,最后boot/chroot之后再用这套工具构建最终的系统。
如果是针对裸机的,其实可以连libc都不要,而且binutils和gcc都只需要编译一遍,一个例子是coreboot的交叉工具链,看看make crossgcc的过程就知道了。
针对Linux的话,根据CLFS的步骤,是这么做的:
1. cross binutils: 在HOST上运行,产生TARGET的二进制文件
2. cross gcc (static): 在HOST上运行,产生TARGET的二进制文件,不产生动态库,不使用TARGET平台的C库
3. glibc: TARGET平台的C库,用前两步构建的交叉工具链编译
4. cross gcc: 在HOST上运行,产生TARGET的二进制文件,交叉编译时使用上一步的glibc
这个时候已经可以构建出独立运行于TARGET的程序了,crosstool-ng之类的工具做到这里就完成任务了。对于CLFS,还要先构建一套工具,其中的binutils和gcc都是TARGET->TARGET,最后boot/chroot之后再用这套工具构建最终的系统。