嵌入式Linux C编程学习之路(三)——初识GCC

       Gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作之一。Gcc可以在多种硬体平台上编译出可执行程序,其执行效率与一般的编译器相比平均效率要高20%~30%。

      Gcc最基本的用法是∶gcc [options] filenames
options:编译器所需要的编译选项 ,filenames: 要编译的文件名。

vim hello.c→gcc hello.c→./a.out

在编译选项缺省情况下,默认生成a.out可执行文件,使用bash可以直接执行该代码。

hello.c代码:

#include"stdio.h"
void main()
{
printf("hello world\n");
}

    执行a.out可以看出运行正常。

[root@loc kkw]# ./a.out 
hello world

     GCC编译器能将C/C++语言源程序、汇编程序形成可执行文件。整个形成过程可以被细分为四个阶段:Hello.c预处理→Hello.i编译→Hello.s汇编→Hello.o连接→hello

Gcc通过后缀来区别输入文件的类别,常见类型有:
.c为后缀的文件: C语言源代码文件
.a为后缀的文件: 是由目标文件构成的库文件
.C,.cc或.cxx 为后缀的文件: 是C++源代码文件
.h为后缀的文件: 头文件
.o为后缀的文件: 是编译后的目标文件
.s为后缀的文件: 是汇编语言源代码文件

     在使用gcc编译时,最重要的就是掌握gcc编译选项,这些选项大约有一百个,大部分我们很少用到或者根本用不到,只有几个根本的、最常用的选项,我们掌握了这几个选项,使用gcc也就没有太大问题了。

1:-o output_filename:确定可执行文件的名称为output_filename。如果不给出这个选项,gcc就给出预设的可执行文件a.out。

[root@loc kkw]# gcc -o hello.o hello.c 
[root@loc kkw]# ls
hello.c  hello.o  workspace  公共的  模板  视频  图片  文档  下载  音乐  桌面
[root@loc kkw]# ./hello.o 
hello world

2:-O,对程序进行优化编译、链接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些。
-O2,比-O更好的优化编译、连接,当然整个编译、连接过程会更慢。

3:-c:不链接。编译器只是由输入的.c等源代码文件编译生成.o为后缀的中间文件。(二进制文件)

[root@loc kkw]# gcc -c hello.c
[root@loc kkw]# ls
a.out    hello.o    公共的  视频  文档  音乐
hello.c  workspace  模板    图片  下载  桌面
[root@loc kkw]# ./hello.o
bash: ./hello.o: 权限不够
[root@loc kkw]# chmod a+x hello.o
[root@loc kkw]# ./hello.o
bash: ./hello.o: cannot execute binary file

4:-g:产生调试工具(GNU的gdb)所需要的符号信息,要想对编译出的程序进行调试,就必须加入这个选项

5:-I dirname: 将dirname所指出的目录作为编译器寻找头文件的标准路径。
C程序中的头文件包含两种情况∶
 #include <A.h>
#include “B.h”
对于<>,gcc在系统预设的头文件目录(如/usr/include)中搜寻相应的文件;而对于” ”,gcc在当前目录中搜寻头文件。-I选项的作用是告诉gcc,如果在当前目录中没有找到需要的文件,就到指定的dirname目录中去寻找。
   gcc的作用仅为编译器,他能让我们更加深入了解代码运行的机制,对深入理解C语言有着很大的帮助。

猜你喜欢

转载自blog.csdn.net/Alone_k/article/details/81150150