运行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文件:
<

本文详细介绍了C++/C代码的编译链接过程,包括预处理、编译、汇编和链接四个步骤。重点讨论了C++与C语言在链接时可能出现的问题,如函数名 mangling,以及如何通过extern "C"来解决接口不匹配的错误。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



