一、基础知识
1、交叉编译的概念
你的本机是linux,你的目标代码是STM32(arm指令的子集)
用linux系统的gcc1,编译一个gcc2,gcc1是linux本机的用于生成x86代码,gcc2本质是x86代码,但是gcc2生成的目标代码是stm32的代码。gcc2是一个干净的编译器,通常还需要集成一个newlib库,或者glibc库。生成gcc3
所以:gcc1是本机的gcc,gcc2是个没有实用价值的gcc(除非你有自己的库),gcc3是你真正需要的gcc。
2、编译的步骤
1、下载binutils
2、下载gcc,不建议下载gcc-core,下载包含全部的包。
3、下载newlib
4、下载linux内核,用gcc-core需要,下载gcc全部的包不需要,gcc全部的包,包含了头文件。建议下载gcc全部的包。这个是理由。
补充:头文件传奇。http://www.linuxsir.org/bbs/thread303531.html
5、编译binutils for arm 需要gcc1,即本机要有gcc环境
6、编译gcc for arm ,生成的是gcc2,需要gcc1
7、编译newlib ,使用的是gcc2。
8、再次编译gcc,同时使用嵌入newlib的参数。同样使用的是gcc2,这个时候生成的是gcc3,我们称为gcc with newlib。
3、2条说的gcc2和gcc3有什么区别
gcc2是一个干净的编译器,如果你的系统不需要使用任何标准的库文件或浮点运算,可以使用gcc2