linux下.c文件编译过程,Linux下C语言程序的编译过程

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.pngLinux下C语言程序的编译过程

使用gcc编译程序时,编译工程分为4个阶段:

(1)预处理:(Pre-Processing)

(2)编译:(Compiling)

(3)汇编:(Assembling)

(4)链接:(linking)

预处理、编译、汇编是3个不同的阶段,但gcc在实际操作时可以把3个步骤合并为一个步骤来执行。下面以一个实例介绍如何生成各个阶段的代码。下面演示都针对文件

hello.c 进行。1、编译单个文件

首先 vim hello.c 在hello.c中 按下 i 或者 insert

输入以下内容

#include

#include

int main()

{

printf("Hello world!\n");

return0;

}

#include

#include

int main(int argc, char **argv)

{

printf("Hello

world!\n");

}

输入完成后按 esc 输入:wq保存并退出

再输入以下命令:

gcc -o hello hello.c./hello

执行的结果为:

Hello world!

2、编译多个文件

分别vim

hello.c

和hellolinux.c两个文件,在两个文件中分别存入以下内容:

#include

#include

int main()

{

printf("Hello world!\n");

hello_linux();

exit(0);

}

#include

#include

int main(int argc, char **argv)

{

printf("Hello

world!\n");

hello_linux();

exit(0);

}

#include

void hello_linux(void)

{

printf("hello linux!\n");

}

#include

void hello_linux(void)

{

printf("hello

linux!\n");

}

执行:

gcc -c hellolinux.c

gcc -c hello.c

gcc -o liunxworld  hellolinux.o

hello.o./liunxworld

输出的结果为:Hello

world!hello

linux!

或者将两个.c文件一起编译为

gcc -o hellol hello.c

hellolinux.c./hellolHello

world!hello

linux!

第一阶段

在预处理阶段,输入的是C语言源文件,通常为*.c或者*.C,它们一般带有*h之类的头文件。这个阶段主要处理源文件中的#ifdef、#include和#define预处理命令。该阶段会生成一个中间文件*.i

1.生成预处理后的文件hello.i

gcc

-E hello.c -o hello.i

它通过对源文件hello.c使用E选项来生成中间文件hello.i

第二阶段

在编译阶段,输入的是中间文件*.i,编译后生成汇编语言文件*.s。这个阶段对应的gcc命令如下所示:

2.生成汇编语言文件hello.s

gcc-s

hello.i -o hello.s

第三阶段

在汇编阶段,将输入的汇编文件*.s转换成二进制机器代码*.o,这个阶段对应的gcc命令如下所示:

gcc -c

hello.s-o

hello.o

第四阶段

在链接阶段,将输入的二进制机器代码文件*.o(与其他机器代码文件和库文件)汇集成一个可执行的二进制代码文件。

4.生成可执行文件

gcc hello.o

-o hello

如果有多个源文件,可以这样来编译:gcc -c test1.c -o test1.ogcc -c test2.c -o test2.o gcc test1.o test2.o -o test注意:如果不指定文件名,gcc会生成名为a.out的文件,.out文件只是为了区分编译后的文件,Linux下并没有标准的可执行文件后缀名,一般可执行文件都没有后缀名。编译后生成的test文件就是程序了,运行它:./test

以下是C程序一般的编译过程:

将编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译阶段和链接这两个阶段。

1. 编译阶段先通过“编译器”把一个.c/

.cpp 源代码编译成

.s的汇编代码;再经过“汇编器”把这个.s的汇编代码汇编成.o

的目标代码

2. “连接器”通过连接其他

.o 代码和1中的.o 目标代码生成可执行文件

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值