本站首页    管理页面    写新日志    退出


«July 2025»
12345
6789101112
13141516171819
20212223242526
2728293031


公告

谦卑,荣誉,牺牲,英勇,怜悯,诚实,精神,公正。


我的分类(专题)

日志更新

最新评论

留言板

链接

 

 


Blog信息
blog名称:
日志总数:183
评论数量:698
留言数量:7
访问次数:3016624
建立时间:2005年12月29日




[编程学习]用GCC开发linux应用程序(经典)
文章收藏

newqiang 发表于 2006/3/15 15:38:54

在为Linux开发应用程序时,绝大多数情况下使用的都是C语言,因此几乎每一位Linux程序员面临的首要问题都是灵活运用C编译器.目前Linux下最常用的C语言编译器是GCC(GNU Compiler Collection),它是GNU项目中符合ANSIC标准的编译系统,能够编译用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!\n");                                   return 0;                                                                      }                                                                                                                                                                                                                                                                                                                               然后执行下面的命令编译和运行这段程序:                                                                                                                           # gcc hello.c -o hello                                                          # ./hello                                                                       Hello world, Linux programming!                                                                                                                                                                                                                                                                                                 此时若查看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");                 


阅读全文(11339) | 回复(2) | 编辑 | 精华
 


回复:用GCC开发linux应用程序(经典)
文章收藏

游客(游客)发表评论于2009/11/29 11:16:31

long long 是 C99 的一部分


个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


回复:用GCC开发linux应用程序(经典)
文章收藏

leo(游客)发表评论于2009/7/15 10:58:43

很不错的入门讲解

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.063 second(s), page refreshed 144750423 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号