第三章:C文件到二进制文件过程

编译过程
1.预处理(不做语法检查)
会把include引入的库文件嵌入到当前c文件代码。
示例:
1.1创建文件 touch a.h,创建文件touch hello.c
1.2填入a.h内容

int a;

1.3 填入hello.c内容

#include "a.h"
int main (int argc,char *argv[]){
	return 0;
}

1.4执行预处理命令 gcc -E hello.c -o hello.i
发现hello.i文件内容变为

int a;
int main (int argc,char *argv[]){
	return 0;
}

2.编译(编译器根据上一步转为汇编指令代码,会语法检查)
gcc -S hello.i -o hello.s
3.汇编(根据汇编文件生成目标文件,是二进制的,无法运行该文件)
gcc -c hello.s -o hello.o
4.链接(把二进制的指令链接到各个动态库,生成可执行的二进制文件)可以执行ldd hello(windows上可以使用depends软件直接拖拽进入即可发现需要依赖的动态库dll文件)看到这个文件文件执行所需要的动态库,只要把dll动态库文件放在执行的文件同级就可以运行了
gcc hello.o -o hello_elf

system()和#include的区别
system("./helloworld");相当于java的直接调用api得到结果
#include "a.h"相当于java引入外部类,外部依赖,代码抽取出来的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值