Linux_1.1_ GCC程序编译

来源:互联网 发布:钛度科技淘宝 编辑:程序博客网 时间:2024/06/05 20:56

讲解思路目录:


1.1  GCC特点:



1.2 GCC基本用法:



简单测试:

 1) touch hello.c

创建一个hello.c文件.

touch命令不过多解释,详情请点击打开链接

也可以直接使用vim创建,此处为了多练习命令.

 2) vim hello.c 

 



 2.1 GCC编译流程

 

 对hello.c的编译过程进行拆解:

 1) 预处理为.i文件

 gcc -E hello.c -o hello.i

 2) 编译成汇编程序.s

 gcc -S hello.i -o hello.s

 3) 将汇编文件通过汇编编译成为二进制文件.o

 gcc -C hello.s -o hello.o

 4) 最后将二进制文件链接成可执行程序

 gcc hello.o -o hello

 注意执行gcc hello.o -o hello 时,会出现如下问题:




原因在第3步时,汇编hello.s汇编成二进制hello.o时main函数冲突造成的

解决办法使用如下命令进行汇编:

将第3步改为 as hello.s -o hello.o

其它的一样.

为什么用as呢?

as命令GNU组织推出的一款汇编语言编译器,它支持多种不同类型的处理器。

来自: http://man.linuxde.net/as


具体问题请看大神解析点击打开链接


2.1.1 gcc基本规则

gcc所遵循的部分约定规则:
.c为后缀的文件,C语言源代码文件;
.a为后缀的文件,是由目标文件构成的档案库文件;
.C,.cc或.cxx 为后缀的文件,是C++源代码文件且必须要经过预处理;
.h为后缀的文件,是程序所包含的头文件;
.i 为后缀的文件,是C源代码文件且不应该对其执行预处理;
.ii为后缀的文件,是C++源代码文件且不应该对其执行预处理;
.m为后缀的文件,是Objective-C源代码文件;
.mm为后缀的文件是Objective-C++源代码文件;
.o为后缀的文件,是编译后的目标文件;
.s为后缀的文件,是汇编语言源代码文件;
.S为后缀的文件,是经过预编译的汇编语言源代码文件。

2.2 gcc 编译选项


1)程序优化




 2)产生调试工具



 3)头文件路径寻找


 gcc -I /myroot hello.c -o hello


4)错误信息



5)宏


例如:

程序中将define注释掉



正常情况下是不会运行printf的,因为程序中没有定义宏PRINT. 如下:


在编译时指定使用PRINT宏,则程序会运行printf. 如下




0 0