115
社区成员
gcc hello.c -o hello 这个过程其实是分四步完成的。
预处理(preprocessing):处理C程序中以'#'开头的行
(arm-linux-)gcc -E hello.c -o hello.i
==> hello.i这个文件还是C源代码文件
编译(compiling):把C源代码文件编译成汇编文件
(arm-linux-)gcc -S hello.i(hello.c) -o hello.s
==> hello.s这个文件是一个汇编指令文件
汇编(assembling):把一个汇编文件编译成一个目标文件(机器指令文件)
(arm-linux-)gcc -c hello.s -o hello.o
或 (arm-linux-)as hello.s -o hello.o
链接(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