要想读懂本文,你需要对C语言有基本的了解,本文将介绍如何使用gcc编译器
首先,我们介绍如何在命令行方式下使用编译器编译简单的C源代码
然后,我们简要介绍一下编译器究竟作了那些工作,以及如何控制编译过程
我们也简要介绍了调试器的使用方法
GCC rules 你能想象使用封闭源代码的私有编译器编译自由软件吗
你怎么知道编译器在你的可执行文件中加入了什么
可能会加入各种后门和木马
Ken Thompson是一个著名的黑客,他编写了一个编译器,当编译器编译自己时,就在'login'程序中留下后门和永久的木马
请到 这里 阅读他对这个杰作的描述
幸运的是,我们有了gcc
当你进行 configure; make; make install 时, gcc在幕后做了很多繁重的工作
如何才能让 gcc为我们工作呢
我们将开始编写一个纸牌游戏,不过我们只是为了演示编译器的功能,所以尽可能地精简了代码
我们将从头开始一步一步地做,以便理解编译过程,了解为了制作可执行文件需要做些什么,按什么顺序做
我们将看看如何编译C程序,以及如何使用编译选项让 gcc按照我们的要求工作
步骤(以及所用工具)如下: 预编译 (gcc -E), 编译 (gcc), 汇编 (as),和 连接 (ld)
首先,我们应该知道如何调用编译器
实际上,这很简单
我们将从那个著名的第一个 C程序开始
(各位老前辈,请原谅我)
#include int main() { printf("Hello World
\n"); } 把这个文件保存为 game
你可以在命令行下编译它: gcc game
c 在默认情况下,C编译器将生成一个名为 a
out 的可执行文件
你可以键入如下命令运行它: a
out Hello World 每一次编译程序时,新的 a
out 将覆盖原来的程序