今天逛了逛校园招聘会,发现市场对软件开发,IOS开发,Web前端,嵌入式开发等技术的需求量还是挺大的,作为一名即将要面临找工作的我来说,这是一种提醒,而正在学习Linux的我更有必要在努力将这门语言学好的同时更要不断地学习其他知识。从招聘会回来,想着要好好了解下这些从事这些职业需要的知识与技术。因为最近在学Linux,所以就先从学好Linux开始吧。 Linux平台下的嵌入式开发领域,gcc是用的最多的一种编译器,它能运行在不同的操作系统上,gcc既能为某平台编写程序并在该平台上编译,也可以在一平台上编译的程序提供给另一平台使用。下面一起来了解下gcc的编译过程吧。
使用gcc编译程序时,可以分为以下4个阶段。
1. -E 预处理过程
gcc -E xxx.c -o xxx.i //生成预处理文件
2. -S 编译过程
gcc -S xxx.i -o xxx.s //生成汇编文件
3. -c 汇编过程
gcc -c xxx.s -o xxx.o //生成目标代码(2进制)
4. 链接过程
gcc xxx.o -o xxx //生成可执行文件(2进制)
注:以上的xxx是写有代码的文件名。
以上即是gcc编译的四个过程。下面就实际操作给大家展示下这些过程:
首先,用vim命令创建或者打开一个文件,我创建了一个名为abc.c文件,并在该文件中写入代码后保存并退出到终端界面。(如图1) 这时,在桌面上会出现刚才创建的abc.c的文件。
然后,在终端输入预处理过程的命令后,在桌面会出现abc.i文件。(如图2)
现在我给大家打开abc.i文件,这是生成的预处理文件。(如图3)
一段简短的程序生成的预处理文件居然这么多! 别着急,接下来是编译过程了。同样,输入编译命令后在桌面会生成abc.s文件。(如图4)此时,再打开abc.s文件看看里面的汇编文件。(如图5)
咱们接着下来的步骤:汇编过程,如同上述一样,请看下图。
最后一步,链接过程,看图吧!
好啦,到这里,这四个过程已经操作完成了。看到最后是不是有种要晕的感觉?但是我们应该关心下最后的运行结果,输入./abc 命令后结果被输出。请看下图:
这就是gcc的整个编译过程了。希望大家能指正,谢谢!