gcc编译器

一.gcc编译器

    1.1编译步骤

            分为1.预处理 2.编译 3.汇编 4.链接 四个步骤。

            详情  http://blog.youkuaiyun.com/thank_t_f/article/details/79539096


    1.2文件类型约定

            
文件后缀名文件类型约定
.c   C语言源代码文件                                                                                                        
.a由目标文件构成的档案库文件        
.C 或.cc或 .cxx C++源代码文件
.h            程序包含的头文件
.i经处理过的C源代码文件
.ii经处理过的C++源代码文件
.mObjective-C源代码文件
.o编译后的目标文件
.s汇编语言源代码文件
.S经过预编译的汇编语言源代码文件


    1.3常用选项


选项   含义描述
-o filename指定输出文件名,在编译为目标代码时,这一选项不是必须的。如果filename没有指定,默认文件为 a.out
-c只编译不链接,生成目标文件‘.o'
-S只编译不汇编,生成汇编代码
-E只进行预编译,不做其他处理
-g在生成的可执行程序中包含标准调试信息
-v打印编译器内部编译各过程的命令行信息和编译器的版本号
-I dir在头文件的搜索策略路径列表中添加dir目录
-L dir在库文件的搜素策略路径列表中添加dir目录
-static    链接静态库
-Dmacro定义指定的宏,使他能够通过源代码中的#ifdef进行检验
 -O,-O2, -O3将优化状态打开,该选项不能与-g选项联合使用
-Wall将warning 看作 error 对待
-Werror同上
-w禁止所有的报警
-pedantic    严格要求符合ANSI标准
  

   2.1安装和配置gcc

  •         一般gcc机器内会直接默认安装gcc编译器的。
  •          如果缺少常用的头文件和库文件可以使用 下列命令来联网下载
                  #sudo apt-get install bulid-essential 

  •         /usr/include  这个目录及其子目录包含程序需要的头文件
  •         /usr/lib         大部分的编译程序会放在这个目录,这里有编译时需要的可执行程序,和一些特定的库文件与头文件等



   2.2警告提示功能

            -pdantic 选项  gcc在编译时若发现不符合ANSI/ISO C语言标准的源代码时,会出现警告 。虽然能帮助发现一部分,但并不是全部。事实上只有ANSI/ISO C语言标准要求诊断的地方才有可能被发现

             -Wall/-Werror  会使发现的警告看作是错误


   2.3优化gcc

            代码优化是指编译器通过分析代码,找出其中尚未达到最优的部分,然后对其重新进行组合,目的是改善程序的执行性能。

                -O -O2 -O3 代表优化的3个级别,O3最高,级别越高,执行速度越快,但是相应的优化时间越长。

    2.4链接库

            头文件默认路径/usr/include/ 
            库文件默认路径是/usr/lib/
            
            当需要链接不在标准位置的头文件和库文件时可以使用:
                头文件:  -I   dir  将目录dir放在头文件搜索目录中。
                库文件:     -L dir    将目录dir放在库文件搜索目录中。
            

            Linux 下库文件分为动态链接库(通常以.so)结尾,和静态链接库(通常以.a结尾) 

            两者的差别在于程序执行时所需的代码是在运行时动态加载的,还是在编译时静态加载的。

            默认情况下,gcc优先使用动态库,只有在动态库没有时才考虑静态库,也可以直接使用 -static 强制使用静态库。



    2.5同时编译多个源程序

               假定有fool1.c fool2.c fool3.c 3个文件进行编译,可以使用下面这条语句
        #gcc fool1.c fool2.c fool3.c -o foo

              但是上面这条指令相当于  

        #gcc -c fool1.c -o fool1.o
        #gcc -c fool2.c -o fool2.o
        #gcc -c fool3.c -o fool3.o
        #gcc fool1.o fool2.o fool3.o -o foo

        在仅有几个文件时,这种编译方法没有什么问题。

        但是若有100文件时,当有一个需要更改,那么就要对100个文件都重新编译一次,很显然这样浪费的时间相当多。 为了解决这个问题, 我们可以借助make 这样的工具。--后面再说。

     2.6调试选项

            gcc默认情况下在编译时是不会将调试符号插入到生成的二进制代码中,因为这会 增加可执行文件的大小。如果需要在编译时生成调试符号信息,可以使用gcc的-g 或者-ggdb 选项。
            
            -g :  可以在-g后添加数字1,2,3来致电给加入调试信息的多少,默认级别2.
                    gcc产生的调试符号可以被多种调试器使用。
     -ggdb: 会产生gdb调试器专用的调试信息,这种做法可以方便gdb调试器工作,但是其他调试器就无法正常调试了。
             

            

            


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值