Linux学习日记(十一)——Ubuntu下使用gcc编译器

                                         Ubuntu下使用gcc编译器

    

   gcc是一款linux下的文本编译器,作为一款编译源代码的工具。

  • gcc编译器的四个阶段

       在gcc对源文件进行编译的过程中需要经过以下四个阶段:

Linux学习日记(十一)——Ubuntu下使用gcc编译器_第1张图片

  1. 预处理(Pre-Processing)

              在该阶段,对头文件进行真正导入,对宏定义进行展开。可以使用 -E 参数让gcc       编译器在完成预处理阶段后停止下来。

              gcc -E hello.c -o hello.i

 

  2.编译(Compiling)

              在编译阶段,gcc编译器会先进行语法检查,在通过检查后就会将源文件编译成汇       编文件。用户可以使用 -S 参数让gcc编译器在完成这一过程后停止下来。

              gcc -S hello.i -o hello.s

 

  3.汇编(Assembling)

              汇编阶段要进行的工作是将gcc前面过程中生成的汇编文件进行汇编得到二进制       目标代码。用户可以使用 -c 参数让编译器在完成汇编后停止下来。

              gcc -c test.s -o test.o

 

  4.连接(Linking)

              在者一阶段gcc编译器会将各个二进制模块和动态库、静态库进行链接操作,得到       最终的可执行文件。

              gcc test.o -o test

 

  • gcc编译器常用选项

       -c

              只编译不链接,生成目标文件“.o”

       -S

              只编译不汇编,生成汇编文件

       -E

              只进行预编译

      -D

             定义额外的宏

      -O num

             编译优化,O后跟的num的取值一般为0~3的范围内进行取值

       -g

              在可执行文件中包含标准调试信息,用于后期调试

       -o file

              将file文件指定为输出文件

       -v

              打印出编译器内部编译各过程的命令行信息和编译器的版本

       -I dir

              在头文件的搜索路径列表中添加dir路径

 

  • gcc编译器库选项

-static

       进行静态编译,链接静态库,禁用动态库

-shared

       1、生成动态库

       2、进行动态编译,尽量链接动态库,如果没有匹配的动态库会链接同名的静态库

-L dir

       在库的搜索路径上添加dir路径

-l name

       链接名为libname.a的静态库或者名为libname.so的动态库

-f pic

       生成使用相对地址的位置无关的目标代码,然后使用gcc的 -static 选项从该pic       目标文件生成动态库

  • gcc编译器警告和出错选项

       -ansi

              支持符合ansi标准的C程序

       -pedantic

              允许发出ansi标准所列出的全部警告信息

       -pedantic-error

              允许发出ansi标准所列出的全部错误信息

       -w

              关闭所有警告

       -Wall

              允许发出gcc提供的所有有用的报警信息

       -werror

              把所有的警告信息转化为错误信息,并在警告发生时终止编译过程

 

  • gcc编译器体系结构相关选项

-mcpu=type

       针对不同的cpu使用相对应的cpu指令,可以选择的type有i386、i486、pentium、       i686等

-mieee-fp

       使用IEEE标准进行浮点数的比较

-mno-ieee-fp

       不使用IEEE标准进行浮点数的比较

-msoft-float

       输出包含浮点库调用的目标代码

-mshort

       把int类型作为16位进行处理

-mrtd

              强行将函数参数个数固定的函数用retNUM返回,节省用函数调用的一条指令

 

 

你可能感兴趣的:(Linux)