gcc的简单使用教程

   前几天在学习嵌入式入门时,有一个视频中就是介绍gcc的使用的,看了视频后突然好

想将GCC的手册页翻译出来,后来看到手册页发现实在太多了,凭我个人的能力根本无

法完成,只能写一些自己使用Gcc时的一些常规使用方法.

    GCC是GNU的成员之一,原意是GNU的C语言编译器,后来发展到不只能够编译C语

言,他还支持编译C++,OBJECTIVE-C等多种计算机语言时,现在的意思就变成了GNU

的编译器集合了.

一般用法:

             gcc [Options] Infile......

描述:

             当你常规使用gcc编译一个程序时,他通常执行4个步骤:预编译,编译,汇编,连接.

   当然你可以通过指定某个选项来使它停止在某个步骤上.如你可以通过指定选项-S

  选项来使他停止在编译上(也就是说让gcc只做预编译,编译后就不继续做下去了)

              由于gcc接受选项和文件作为操作符,它的大多数选项都是多个字母组成的

(注:如-static选项,它是一个选项,而不是我们在一般命令中见到的由多个选项组

合),因此我们不能将多个单一字母的选项组合在一起,如-dv选项不等于-d和-v选项的

组合。

               你可以混合使用选项和参数,对于大多数选项来说,你不必关心你指定这些

选项的位置,但当你多次指定同一个选项(如-I选项)时,你就需要关心他们出现的顺序

了,这是因为这些选项通常会指导gcc从某些目录中查找一些需要的文件,而选项的

顺序正是gcc查找目录的顺序,这也就是说,你指定在前面的选项的目录优先查找。

下面是一些常规选项:

   [1].指定GCC进行的操作的选项

          -E  :让GCC仅进行预处理后就不继续作下去了 

          -S :让GCC仅进行预处理,编译后就不继续作下去了

          -c :让GCC仅进行预处理,编译,汇编后就不继续作下去了

          -o Ouput:指定输出文件,默认gcc编译输出的程序名为a.out.

          @File:让gcc执行指定文件File中的命令,该文件中每个gcc命令以空白符隔开

  [2].指定使用的C语言标准

           -std=Standard:指定标准,详细标准参考gcc手册页,你可以指定-std=c89(使用

                  89年制定的C语言标准),也可以指定-std=c99(使用99年制定的C标准)

           -ansi:等价于-std=c89

   [3].控制输出信息

            -w:禁止输出所有警告信息

            -Wall:输出所有警告信息

            -Werror:将所有警告信息当成错误信息输出

   [4].调试相关选项(生成调试信息)

            -g:生成用于GDB调试程序使用的调试信息

            -p:生成用于prof程序使用的调试信息

            -pg:生成用于gprof程序使用的调试信息

    [5].程序优化选项

             -O,-O1:初步优化(会占用更多时间进行编译,但是编译后的程序运行时占用

                          的内存更少)

             -O2:比-O1更进一步优化

             -O3:比-O2更进一步优化

             -O0:不进行优化

    [6].宏操作

             -D name:定义宏name的值为1,类似在源程序中使用#define name 1

             -D name=val:定义宏name的值为val,类似#define name val

              -U name:取消宏name的定义,类似#undef name

              -undef:取消所有系统指定或GCC指定的宏定义,但保留标准预定义的宏

      [7].指定搜索目录

               -I dir,-Idir:追加目录dir到头文件的搜索路径中

               -L dir,-Ldir:追加目录dir到库文件的搜索路径中

                -Bprefix:指定gcc查找库文件,头文件,数据文件的目录

       [8].指定使用的库文件,头文件

                  -nostdinc:不使用标准头文件(默认在/usr/include)

                  -nostdlib:不使用标准库文件(默认在/usr/lib)

                   -l library:指定使用的库文件,默认gcc在编译一个程序时只连接到标准c库

                                上,是用该选项能够使他连接到指定的库上,例如若你要连接到

                                数学库上(libm.a)则你只须指定 -lm就可以了。也就是说这个选项

                                指定连接的库文件可以将前缀lib和后缀.a(或.so)省略。

                   -nostartfiles:不使用标准的系统的startup文件

       [9].指定连接库文件的方式

                   -shared:动态连接到库文件上,这是默认行为。

                   -static:静态连接到库文件上

                   注:动态连接和静态连接的区别在于:动态连接是在程序运行时才连接到

                           库文件上(也就是需要用到时才连接上),而静态连接则是在编译时就

                           将程序连接到库文件中(这样做会增大程序,但便于移植)

         [10].杂项

                    --sysroot=Dir:指定头文件和库文件的搜索路径的根目录。头文件搜索目录

                             为Dir/usr/include,库文件的搜索目录为Dir/usr/lib,默认Dir为空

                    -march=体系结构类型:详细情况参见man gcc

                     -mtune=CPU类型:详细情况参见man gcc

实例:

           cat<<"EOF">example.c

                #include<stdio.h>

                 int main(void)

                 {

                              int i,sum=0;

                              for(i=0;i<=100;i++)

                                      sum+=i;

                             printf("1+...+100=%d\n",sum);

                             return 0;

                    }

             EOF

常规编译: gcc -o example example.c

编译后就可以在编译目录中执行 ./example来运行程序

优化编译: gcc -O2 -o example_1 example.c

可以使用  time ./example和time ./example_1来比较它们的运行时间,你就会发现优化后

程序运行时间明显短于未优化的程序

 

你可能感兴趣的:(linux,linux,gcc,gcc,休闲,程序编译,优化编译)