GCC使用详解

来源:互联网 发布:shell脚本和linux命令 编辑:程序博客网 时间:2024/05/22 03:09

1.gcc编译程序过程:
         在使用gcc编译程序时,编译过程可以为4个阶段:
(1)预处理:(Pre-Processing)
(2)编译:(Compiling)
(3)汇编:(Assembling)
(4)链接:(Linking)
         Link程序员可以根据自己的需要让gcc在编译的任何阶段结束,以便检查或使用编译器在该阶段的输出信息,或者对最后生成的二进制文件进行控制,以便通过加入不同的数量和种类的调试代码来为今后的调试做好准备。另外,gcc也和其他常用的编译器一样,提供了灵活而强大的代码优化功能,利用它可以生成执行效率较高的代码。
        在功能上,预处理、编译、汇编是3个不同的阶段,但gcc在实际操作时可以把这3个步骤合并为一个步骤来执行。

2.gcc的常用选项
        在使用gcc编译器的时候,我们必须给出一系列必要的选项和文件名。gcc编译器的选项有100多个,其中很多参数一般是用不到的,这里只结束最基本最常用的参数。另外,我们可以通过使用man gcc / info gcc来详细了解gcc的所有选项。
        gcc [options] [filenames]                      其中options就是编译器所需要的选项,filenames给出相关的文件名。 

-c:只编译,不链接生成可以执行文件,编译器值是由输入的.c等为后缀的源文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。
-o output_file:确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就默认将输出的可执行文件命名为a.out。
-g:产生调试器gdb所必须的符号信息,要对源代码进行调试,就必须在编译程序是加入这个选项。
-O:对程序进行优化编译、链接,采用这个选项,整个源代码会在编译、链接过程中进行优化处理,这样产生的可执行文件效率较高,但是,编译、链接的速度就相应地要慢一些。
-O2:比-O更好的优化编译、链接,当然整个编译、链接过程会更慢。
-Wall:输出所有警告信息,在编译的过程中如果gcc遇到一些认为可能会发生错误的地方就会提出一些相应的警告和提升信息。提升注意这个地方是不是有什么错误。
-w:关闭所有的警告,建议不要使用此选项。
-Idirname:将名为dirname的目录加入到程序头文件目录列表中,它是在预处理阶段使用的选项。I意指Include。
  

C程序中包含头文件有两种方法:
a.#include <myinc.h>
b.#include "myinc.h"
         对应第一种使用尖括号的,编译器gcc在系统预设包含文件目录(如/usr/include)中查找相应的头文件myinc.h。而对于第二种,编译器gcc首先在当前目录中查找头文件,如果当前目录中没有找到需要的头文件,就到指定的dirname目录中去寻找。


-Ldirname:将名为dirname的目录加入到程序的库文件搜索目录列表中,它是在链接过程中使用的参数。L意指Link.
-lname:指示编译器,在链接时,装载名为libname.a的函数库,该函数库位于系统预定义的目录或者-L选项指定的目录下。例如:-lm表示链接名为libm.a的数学函数库。 

3.gcc报错与应对
(1)C语法错误
错误信息:源文件的第n行有语法错误(syntex error)。重回原件在vim界面下进入末行模式,然后输入:set nu,让源文件显示行号,再进入编辑模式(insert),仔细查看第n行前后代码。
(2)头文件或库文件错误
错误信息:找不到头文件header.h。可能原因有头文件名错误、指定头文件所在目录名错误等,也可能是错误地使用了双引号或尖括号。
(3)未定义的符合
错误信息:有未定义的符合(undefined symbol)。仔细检查看源代码中有无未定义或者未声明就使用的符号。

原创粉丝点击