首页 > 要闻 >

编译软件(编译)

发布时间:2024-02-07 15:00:23来源:

你们好,最近小艾特发现有诸多的小伙伴们对于编译软件,编译这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下看看吧。

1、编写c代码,并输入以下代码,生成文件hello.c

2、[root@wahoo test]# vim hello.c

3、#include <stdio.h>

4、#define DISPLAY "hello c!"

5、int main(void)

6、{

7、 printf("%s\n", DISPLAY);

8、 return 0;

9、}

10、ZZ(说明:ZZ当前文件进行快速保存操作)

11、预编译(Preprocessing)

12、会对各种预处理指令(#include#define#ifdef 等#开始的代码行)进行处理,删除注释和多余的空白字符,生成一份新的代码

13、[root@wahoo test]#gcc -E hello.c -o hello.i

14、E 参数 通知gcc对目标文件进行预编译,这里是对文件hello.c文件

15、o 参数 是对命令输出结果进行导入操作,这里是把gcc -E hello.c 操作结果输出到文件hello.i(命名要自定义)中进行保存

16、这个命令执行完后我们目录下多了一个文件hello.i,你可以查阅一下文件的内容。

17、编译(Compilation)

18、对代码进行语法、语义分析和错误判断,生成汇编代码文件

19、[root@wahoo test]#gcc -S hello.i -o hello.s

20、S 参数 通知gcc对目标文件进行编译,这里是对文件hello.i文件

21、通过这一步我们知道 C语言跟汇编的 关系,至于他们之前是如何进行转换的,大家可以进行更深入的学习与探讨。

22、此时目录下多了一个hello.s文件,内容如图

23、汇编(Assembly)

24、把汇编代码转换与计算机可认识的二进制文件,要知道计算机只认识0和1呢

25、[root@wahoo test]#gcc -c hello.s -o hello.o

26、c 参数 通知gcc对目标文件执行指令转换操作

27、此步骤我们得到文件hello.o

28、大家也同样打开文件查看一下,这个文件里面几乎没几个字符大家能看懂,这就对了,但大家可以通过这种方法将其转化为我们可读的形式:

29、[root@wahoo test]#readelf -a hello.o

30、链接(Linking/Build)

31、通俗的讲就是把多个*.o文件合并成一个可执行文件,二进制指令文件

32、[root@wahoo test]#gcc hello.o -o hello

33、这里我们就得到了一个可以直接在系统下执行的文件 hello

34、我们也可以对这个文件进行readelf操作,也可以进行二进制指令转汇编的操作

35、[root@wahoo test]#objdump -d hello

36、程序运行

37、[root@wahoo test]#./hello

38、hello c!

39、总结:gcc 编译c程序的主要过程包括预编译->编译->汇编->连接 四个过程,每个过程都分别进行不同的处理,了解了这其中的一些原理,对c编程的理解大有益处

以上就是编译这篇文章的一些介绍,希望对大家有所帮助。

免责声明:本答案或内容为用户上传,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。 如遇侵权请及时联系本站删除。