C语言基础教程 之 C语言编译过程


C语言基础教程目录:https://blog.csdn.net/SparkLee2013/article/details/85229406


1、C程序编译步骤

C代码编译成可执行程序经过4步:

1) 预处理:宏定义展示,头文件展开,条件编译等,同时将代码中的注释删除。注:预处理并不会检查语法;

2) 编译:检查语法,将预处理后的文件编译生成汇编文件;

3) 汇编:将汇编文件生成目录文件(二进制文件);

4) 链接:C语言写的程序是需要依赖各种库的,所以编译之后还需要把库链接到最终的可执行程序中去。

2、一步编译

使用gcc可直接将一个或多个c文件编译并生成输出二进制文件

# gcc命令若不指定输出文件名"-o选项",则编译生成的二进制文件名默认为"a.out"
[admin@spk ~]$ ls
hello.c
[admin@spk ~]$ gcc hello.c 
[admin@spk ~]$ ls
a.out hello.c

# 通过"-o选项"指定编译生成的二进制文件名为"hello"
[admin@spk ~]$ gcc -o hello hello.c 
[admin@spk ~]$ ls
a.out  hello  hello.c

# 执行编译生成的二进制可执行文件
[admin@iZ23pektl6zZ c]$ ./hello 
hello world

3、分步编译

可以通过指定gcc相关选项对C语言程序进行分步编译

# gcc分步编译选项
[admin@spk ~]$ gcc --help
Usage: gcc [options] file...
Options:
......
	-E                       Preprocess only; do not compile, assemble or link
	-S                       Compile only; do not assemble or link
	-c                       Compile and assemble, but do not link
	-o <file>                Place the output into <file>
......

# 第1步、预处理(只进行预处理):源文件hello.c经过预处理生成hello.i文件,预处理文件hello.i依然是C代码文件
[admin@spk ~]$ ls
hello.c
[admin@spk ~]$ file hello.c
hello.c: ASCII C program text
[admin@spk ~]$ gcc -E hello.c -o hello.i
[admin@spk ~]$ ls
hello.c  hello.i
[admin@spk ~]$ file hello.i
hello.i: ASCII C program text

# 第2步、编译(只进行预处理和编译):预处理文件hello.i经过编译生成汇编代码文件hello.s
[admin@spk ~]$ gcc -S hello.i -o hello.s
[admin@spk ~]$ ls
hello.c  hello.i  hello.s
[admin@spk ~]$ file hello.s
hello.s: ASCII assembler program text

# 第3步、汇编(只进行预处理、编译和汇编):汇编代码文件hello.s经过汇编生成二进制机器目标代码文件hello.o
[admin@spk ~]$ gcc -c hello.s -o hello.o
[admin@spk ~]$ ls
hello.c  hello.i  hello.o  hello.s
[admin@spk ~]$ file hello.o
hello.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped

# 第4步、链接:将C语言库文件链接到可执行程序中,并指定生成的输出文件名为hello
[admin@spk ~]$ gcc hello.o -o hello
[admin@spk ~]$ ls
hello  hello.c  hello.i  hello.o  hello.s
[admin@spk ~]$ file hello
hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped
[admin@spk ~]$ 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值