如何用gcc编译

如何用gcc编译

ID:37755543

大小:30.48 KB

页数:10页

时间:2019-05-30

如何用gcc编译_第1页
如何用gcc编译_第2页
如何用gcc编译_第3页
如何用gcc编译_第4页
如何用gcc编译_第5页
资源描述:

《如何用gcc编译》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、目录:·GCCrules·开始...·预编译·编译·汇编·连接·另外两个重要选项·调试·小结·站点链接 摘要:要想读懂本文,你需要对C语言有基本的了解,本文将介绍如何使用gcc编译器。首先,我们介绍如何在命令行方式下使用编译器编译简单的C源代码。然后,我们简要介绍一下编译器究竟作了那些工作,以及如何控制编译过程。我们也简要介绍了调试器的使用方法。 GCCrules你能想象使用封闭源代码的私有编译器编译自由软件吗?你怎么知道编译器在你的可执行文件中加入了什么?可能会加入各种后门和木马。KenThompson是一个著名的黑客,他编写了一个编译器,

2、当编译器编译自己时,就在'login'程序中留下后门和永久的木马。请到这里阅读他对这个杰作的描述。幸运的是,我们有了gcc。当你进行configure;make;makeinstall时,gcc在幕后做了很多繁重的工作。如何才能让gcc为我们工作呢?我们将开始编写一个纸牌游戏,不过我们只是为了演示编译器的功能,所以尽可能地精简了代码。我们将从头开始一步一步地做,以便理解编译过程,了解为了制作可执行文件需要做些什么,按什么顺序做。我们将看看如何编译C程序,以及如何使用编译选项让gcc按照我们的要求工作。步骤(以及所用工具)如下:预编译(gcc-

3、E),编译(gcc),汇编(as),和连接(ld)。 开始...首先,我们应该知道如何调用编译器。实际上,这很简单。我们将从那个著名的第一个C程序开始。(各位老前辈,请原谅我)。#includeintmain(){printf("HelloWorld!");}把这个文件保存为game.c。你可以在命令行下编译它:gccgame.c在默认情况下,C编译器将生成一个名为a.out的可执行文件。你可以键入如下命令运行它:a.outHelloWorld每一次编译程序时,新的a.out将覆盖原来的程序。你无法知道是哪个程序创建了a

4、.out。我们可以通过使用-o编译选项,告诉gcc我们想把可执行文件叫什么名字。我们将把这个程序叫做game,我们可以使用任何名字,因为C没有Java那样的命名限制。gcc-ogamegame.cgameHelloWorld到现在为止,我们离一个有用的程序还差得很远。如果你觉得沮丧,你可以想一想我们已经编译并运行了一个程序。因为我们将一点一点为这个程序添加功能,所以我们必须保证让它能够运行。似乎每个刚开始学编程的程序员都想一下子编一个1000行的程序,然后一次修改所有的错误。没有人,我是说没有人,能做到这个。你应该先编一个可以运行的小程序,修

5、改它,然后再次让它运行。这可以限制你一次修改的错误数量。另外,你知道刚才做了哪些修改使程序无法运行,因此你知道应该把注意力放在哪里。这可以防止这样的情况出现:你认为你编写的东西应该能够工作,它也能通过编译,但它就是不能运行。请切记,能够通过编译的程序并不意味着它是正确的。下一步为我们的游戏编写一个头文件。头文件把数据类型和函数声明集中到了一处。这可以保证数据结构定义的一致性,以便程序的每一部分都能以同样的方式看待一切事情。#ifndefDECK_H#defineDECK_H#defineDECKSIZE52typedefstructdeck_

6、t{intcard[DECKSIZE];/*numberofcardsused*/intdealt;}deck_t;#endif/*DECK_H*/把这个文件保存为deck.h。只能编译.c文件,所以我们必须修改game.c。在game.c的第2行,写上#include"deck.h"。在第5行写上deck_tdeck;。为了保证我们没有搞错,把它重新编译一次。gcc-ogamegame.c如果没有错误,就没有问题。如果编译不能通过,那么就修改它直到能通过为止。 预编译编译器是怎么知道deck_t类型是什么的呢?因为在预编译期间,它实际上把"

7、deck.h"文件复制到了"game.c"文件中。源代码中的预编译指示以"#"为前缀。你可以通过在gcc后加上-E选项来调用预编译器。gcc-E-ogame_precompile.txtgame.cwc-lgame_precompile.txt3199game_precompile.txt几乎有3200行的输出!其中大多数来自stdio.h包含文件,但是如果你查看这个文件的话,我们的声明也在那里。如果你不用-o选项指定输出文件名的话,它就输出到控制台。预编译过程通过完成三个主要任务给了代码很大的灵活性。1.把"include"的文件拷贝到要编

8、译的源文件中。2.用实际值替代"define"的文本。3.在调用宏的地方进行宏替换。这就使你能够在整个源文件中使用符号常量(即用DECKSIZE表示一付牌中的纸牌数

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。