|
我们现在以我们学习语言的经典的hello.c的编译为例,对gcc的基本用法做一个了解。已编译hello.c文件为例。创建测试例程路径/home/elf/work/example/hello,在该路径下进行hello.c文件的编写、编译和运行。 elf@ubuntu:~/work/example/hello$ vim hello.c 测试例程内容如下: #include int main(void) { printf("Hello World!n"); return 0; } 用cd命令切换到hello文件夹下,通过gcc命令编译hello.c文件: elf@ubuntu:~/work/example/hello$ gcc hello.c -o hello_ubuntu 可以看到,hello.c文件被编译成功,生成可执行文件hello_ubuntu,我们在终端运行./hello_ubuntu,可以看到输出结果和我们程序的要求一致。如果编译命令不添加-o hello_ubuntu,则编译完成生成的是a.out可执行文件,输出结果是一样的。 elf@ubuntu:~/work/example/hello$ gcc hello.c 1.GCC编译过程 GCC编译器的编译过程要经过预处理,编译,汇编,链接等4步才能够生成可执行文件。 预处理:主要实现将头文件展开,宏定义替换以及解析条件编译到文件中; 编译:将预处理的代码编译转换为汇编语言; 汇编:将汇编语言翻译成二进制文件; 链接:将汇编出来的多个二进制目标文件和库文件进行链接,生成可执行文件。 我们可以通过一个简单的hello.c程序的编译过程对GCC的整个编译过程有一个简单的了解。 1)预处理 elf@ubuntu:~/work/example/hello$ gcc -E hello.c -o hello.i 我们使用vim hello.i命令可以看到预处理文件有将近800行,预处理过程将一个不到10行的代码,生成了一个将近800行的预处理文件。 2)编译 这个过程是将hello.i预处理文件编译成hello.s文件。 elf@ubuntu:~/work/example/hello$ gcc -S hello.i 通过vim hello.s命令可以看到文件中都是汇编语句。 3)汇编 在终端输入gcc –c hello.s将汇编语句生成机器码,得到hello.o文件。 elf@ubuntu:~/work/example/hello$ gcc -c hello.s 4)链接 机器码不能够直接运行,我们通过链接得到可执行文件hello。 
|