Linux_1.1_ GCC程序编译

讲解思路目录:


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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值