没有合适的资源?快使用搜索试试~ 我知道了~
首页linux下gcc编译器的使用
linux下gcc编译器的使用
4星 · 超过85%的资源 需积分: 32 62 下载量 30 浏览量
更新于2023-03-03
评论 1
收藏 56KB DOC 举报
linux下gcc编译器的使用 在为Linux开发应用程序时,绝大多数情况下使用的都是C语言,因此几乎每一 位Linux程序员面临的首要问题都是如何灵活运用C编译器。目前Linux下最常用的C语言编译器是GCC(GNU Compiler Collection),它是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。GCC不仅功能非常强大,结构也异常灵活。最值得称道的一点就是它可以通过不同的前端模块来支持各种语言,如Java、 Fortran、Pascal、Modula-3和Ada等。 开放、自由和灵活是Linux的魅力所在,而这一点在GCC上的体现就是程序员通过它能够更好地控制整个编译过程。在使用GCC编译程序时,编译过程可以被细分为四个阶段: ◆ 预处理(Pre-Processing) ◆ 编译(Compiling) ◆ 汇编(Assembling) ◆ 链接(Linking)
资源详情
资源评论
资源推荐
linux 下 gcc 编译器的使用(网上转载)
2008-08-19 10:43
在为 Linux 开发应用程序时,绝大多数情况下使用的都是 C 语言,因此几乎每
一 位 Linux 程序员面临的首要问题都是如何灵活运用 C 编译器。目前 Linux 下
最常用的 C 语言编译器是 GCC(GNU Compiler Collection),它是 GNU 项
目中符合 ANSI C 标准的编译系统,能够编译用 C、C++和 Object C 等语言
编写的程序。GCC 不仅功能非常强大,结构也异常灵活。最值得称道的一点就
是它可以通过不同的前端模块来支持各种语言,如 Java、
Fortran、Pascal、Modula-3 和 Ada 等。
开放、自由和灵活是 Linux 的魅力所在,而这一点在 GCC 上的体现就是程序
员通过它能够更好地控制整个编译过程。在使用 GCC 编译程序时,编译过程可
以被细分为四个阶段:
◆ 预处理(Pre-Processing)
◆ 编译(Compiling)
◆ 汇编(Assembling)
◆ 链接(Linking)
Linux 程序员可以根据自己的需要让 GCC 在编译的任何阶段结束,以便检查或
使用编译器在该阶段的输出信息,或者对最后生成的二进制文件进行控 制,以
便通过加入不同数量和种类的调试代码来为今后的调试做好准备。和其它常用
的编译器一样,GCC 也提供了灵活而强大的代码优化功能,利用它可以生成执
行效率更高的代码。
GCC 提供了 30 多条警告信息和三个警告级别,使用它们有助于增强程序的稳
定性和可移植性。此外,GCC 还对标准的 C 和 C++语言进行了大量的扩展,
提高程序的执行效率,有助于编译器进行代码优化,能够减轻编程的工作量。
GCC 起步
在学习使用 GCC 之前,下面的这个例子能够帮助用户迅速理解 GCC 的工作原
理,并将其立即运用到实际的项目开发中去。首先用熟悉的编辑器输入清单 1
所示的代码:
清单 1:hello.c
#include <stdio.h>
int main(void)
{
printf ("Hello world, Linux programming!");
return 0;
}
然后执行下面的命令编译和运行这段程序:
# gcc hello.c -o hello # ./hello Hello world, Linux programming!
从 程序员的角度看,只需简单地执行一条 GCC 命令就可以了,但从编译器的
角度来看,却需要完成一系列非常繁杂的工作。首先,GCC 需要调用预处理程
序 cpp,由它负责展开在源文件中定义的宏,并向其中插入“#include”语句所
包含的内容;接着,GCC 会调用 ccl 和 as 将处理后的源代码编译成目 标代码;
最后,GCC 会调用链接程序 ld,把生成的目标代码链接成一个可执行程序。
为了更好地理解 GCC 的工作过程,可以把上述编译过程分成几个步骤单独进行,
并观察每步的运行结果。第一步是进行预编译,使用-E 参数可以让 GCC 在预
处理结束后停止编译过程:
# gcc -E hello.c -o hello.i
此时若查看 hello.cpp 文件中的内容,会发现 stdio.h 的内容确实都插到文件
里去了,而其它应当被预处理的宏定义也都做了相应的处理。下一步是将
hello.i 编译为目标代码,这可以通过使用-c 参数来完成:
# gcc -c hello.i -o hello.o
GCC 默认将.i 文件看成是预处理后的 C 语言源代码,因此上述命令将自动跳过
预处理步骤而开始执行编译过程,也可以使用-x 参数让 GCC 从指定的步骤开
始编译。最后一步是将生成的目标文件链接成可执行文件:
# gcc hello.o -o hello
在采用模块化的设计思想进行软件开发时,通常整个程序是由多个源文件组成
的, 相应地也就形成了多个编译单元,使用 GCC 能够很好地管理这些编译单
元。假设有一个由 foo1.c 和 foo2.c 两个源文件组成的程序,为了对它们进行
编 译,并最终生成可执行程序 foo,可以使用下面这条命令:
# gcc foo1.c foo2.c -o foo
如果同时处理的文件不止一个,GCC 仍然会按照预处理、编译和链接的过程依
次进行。如果深究起来,上面这条命令大致相当于依次执行如下三条命令:
# gcc -c foo1.c -o foo1.o # gcc -c foo2.c -o foo2.o # gcc foo1.o
foo2.o -o foo
在 编译一个包含许多源文件的工程时,若只用一条 GCC 命令来完成编译是非
常浪费时间的。假设项目中有 100 个源文件需要编译,并且每个源文件中都包
含 10000 行代码,如果像上面那样仅用一条 GCC 命令来完成编译工作,那么
GCC 需要将每个源文件都重新编译一遍,然后再全部连接起来。很显然,这样
浪费 的时间相当多,尤其是当用户只是修改了其中某一个文件的时候,完全没
有必要将每个文件都重新编译一遍,因为很多已经生成的目标文件是不会改变
的。要解决这 个问题,关键是要灵活运用 GCC,同时还要借助像 Make 这样
的工具。
警告提示功能
GCC 包含完整的出错检查和警告提示功能,它们可以帮助 Linux 程序员写出更
加专业和优美的代码。先来读读清单 2 所示的程序,这段代码写得很糟糕,仔
细检查一下不难挑出很多毛病:
◆main 函数的返回值被声明为 void,但实际上应该是 int;
◆使用了 GNU 语法扩展,即使用 long long 来声明 64 位整数,不符
合 ANSI/ISO C 语言标准;
◆main 函数在终止前没有调用 return 语句。
清单 2:illcode.c
#include <stdio.h>
void main(void)
{
long long int var = 1;
printf("It is not standard C code!\n");
}
下面来看看 GCC 是如何帮助程序员来发现这些错误的。当 GCC 在编译不符合
ANSI/ISO C 语言标准的源代码时,如果加上了-pedantic 选项,那么使用了扩
展语法的地方将产生相应的警告信息:
# gcc -pedantic illcode.c -o illcode illcode.c: In function `main':
illcode.c:9: ISO C89 does not support `long long' illcode.c:8: return
type of `main' is not `int'
需要注意的是,-pedantic 编译选项并不能保证被编译程序与 ANSI/ISO C 标
准的完全兼容,它仅仅只能用来帮助 Linux 程序员离这个目标越来越近。或者
换句话说,-pedantic 选项能够帮助程序员发现一些不符合 ANSI/ISO C 标准
的代码,但不是全部,事实上只有 ANSI/ISO C 语言标准中要求进行编译器诊
断的那些情况,才有可能被 GCC 发现并提出警告。
剩余11页未读,继续阅读
zhangyongfengmyson
- 粉丝: 0
- 资源: 18
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论6