现在的位置: 首页 > 综合 > 正文

GNU编译工具

2019年05月14日 ⁄ 综合 ⁄ 共 811字 ⁄ 字号 评论关闭

Linux丰富精彩的世界中,经常看到高手们运行一些命令,哗啦啦的一屏屏的自动的开始运行。这些操作的一个最基本的源头就是GNU编译工具链。GNU编译器生成目标过程有很多阶段,大致可以分为四个:

1.预编译

   gcc -E test.c -o test.i
   我们编写一个简单的 打印hello world的test.c程序, 生成预编译好的test.i后, vim test.i可以看到原来短短不到5行的代码被预编译扩展   成将近1000行代码,是对#ifdef,#include,#define之类的预编译指令进行解析。

 

2.编译

   接着我们生成的预编译好的test.i, 进行编译

   gcc -S test.i -o test.s

   这时来查看编译后的test.s, 发现内中代码很向汇编

 

3.汇编

   让我们此时来真正汇编一把

   gcc -c test.s -o test.o

   此时高层代码test.c写成的程序思想已经实现到机器指令级别, 生成了目标文件test.o, 用文字编辑工具打开已经是乱码了。

 

4.链接

   gcc test.o -o test

   最终这才形成了可执行的二进制文件。

 

-------------------------

在保存头文件目录 home/inc 和保存源文件目录 home/src不是同一个目录的情况下,需要

gcc test.c -I ../inc -o test

 

如果在源程序文件和头文件内定义了符号常量

#define TEST_CONFIGURATION

编译时还可以指定符号常量

gcc  -D TEST_CONFIGURATION test.c -o test

 

Q:编译阶段指定符号常量有什么优势?

W:不改变程序就改变程序的行为。

 

 

-------------------------

Q:优化?

A:大致是优化目标有三条路线:

    1.速度更快, 文件更小;

    2. 速度更快,但允许文件变大;

    3. 减小文件大小,允许速度变慢;

    有机会将会仔细讲述。

 

 

抱歉!评论已关闭.