运行C++代码的过程分为预处理,编译,汇编,链接四个步骤(Preprocessing, Compiling, Assemble and Linking )
一、预处理(Preprocessing)
预处理过程处理所有的#开头的预定义语句,比如#include,#define宏等。
从.cpp 或者.c文件生成.i文件
gcc -E test.c -o test.i
# or
cpp test.c -o test.i
二、编译
把高级语言转化为机器码的过程。编译器接受预处理过的代码(.i文件),生成汇编代码,具体生成什么汇编根据操作系统和编译器决定。从.i 文件转换成汇编文件(.s文件)
gcc -S test.i -o test.s
三、汇编
把汇编语言.s文件生成二进制机器码.o文件。
gcc -c test.s -o test.o
四、连接
输入二进制文件,以及静态或者动态依赖库,生成最终的可执行文件。
gcc -o test test.o
由于C++和C是不同的语言,C++需要兼容C的接口。在编译的过程中,C++的底层函数名(也就是符号表中的id)和C的函数的id会不一样,这会导致连接错误。通过C++引入的extern 关键字解决这个问题,extern “C” 表示这段C代码需要再在c++编译环境下引用。看下面的例子
test.c文件:
#include "test.h"
void fun(){
printf("I am C.\n");
}
test.h文件:
<