1, GCC 编译过程
gcc hello.c -o hello 这个过程其实是分四步完成的
step1: 预处理(preprocessing),处理c程序中以'#'开头的行
(arm-linux)-gcc -E hello.c -o hello.i
==> hello.i这个文件还是C源码文件
step2: 编译(compiling),把c源代码文件编译成汇编文件
(arm-linux)-gcc -S hello.i(hello.c) -o hello.s
==> hello.s这个文件是一个汇编指令文件
step3: 汇编(assembling),把一个汇编文件编译成一个目标文件(机器指令文件)
(arm-linux-)gcc -c hello.s -o hello.o
(arm-linux-)as hello.s -o hello.o
step4: 链接(linking),把各个目标文件(.o文件)或.so(库文件)链接成一个可执行文件。
把各个.o文件的数据段合到一起,并且解决地址冲突问题。
无操作系统(裸奔)的情况下,用ld的命令,在arm裸编再详细讲解
(arm-linux)-ld -Ttext=30008000 hello.o a.o b.o -o hello
有操作系统的情况下,命令如下
(arm-linux-)gcc hello.o a.o b.o -o hello
2.内存管理