一个C/C++文件要经过预处理、编译、汇编和连接等4步才能变成可执行文件:
(1)以#开头的命令被统称为预处理,比如“#include”,宏定义命令“#define”和条件编译命令“#if”和 “#ifdef”等,经过预处理后的代码将输出到一个“.i”文件中去,预处理使用arm-linux-cpp工具;
(2)编译就是将“.i”代码“翻译”成汇编代码,即.s文件;
(3)汇编就是将汇编代码“翻译”成一定格式的机器语代码,即.o文件,汇编使用arm-linux-as工具;
例如:现在有main.c,sub.h以及sub.c三个文件。
file:main.c
#include <stdio.h>
#include "sub.h"
int main(int argc, char *argv[])
{
int i;
printf("Main fun!\n");
sub_fun();
return 0;
}
#include "sub.h"
int main(int argc, char *argv[])
{
int i;
printf("Main fun!\n");
sub_fun();
return 0;
}
file:sub.h
void sub_fun(void);
file:sub.c
void sub_fun(void)
{
printf("sub fun!\n");
}
现在在终端下进行编译:
(1) gcc -c -o main.o main.c
(2) gcc -c -o sub.o sub.c
(3) gcc -o test main.o sub.o
使用./test命令后,其打印结果为:
Main fun!
sub fun!