C++/C 编译链接过程

本文详细介绍了C++/C代码的编译链接过程,包括预处理、编译、汇编和链接四个步骤。重点讨论了C++与C语言在链接时可能出现的问题,如函数名 mangling,以及如何通过extern "C"来解决接口不匹配的错误。
摘要由CSDN通过智能技术生成

运行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++编译环

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值