Linux gcc参数说明

来源:互联网 发布:养鱼的软件排行 编辑:程序博客网 时间:2024/05/16 11:22
记录常用的gcc参数说明:
-g 生成调试信息
-IDIRECTORY 指定额外的头文件搜索路径DIRECTORY。
-LDIRECTORY 指定额外的函数库搜索路径DIRECTORY。
-lLIBRARY 连接时搜索指定的函数库LIBRARY。
-o FILE 生成指定的输出文件。用在生成可执行文件时。
-O0 不进行优化处理。
-O 或 -O1 优化生成代码。
-O2 进一步优化。
-O3 比 -O2 更进一步优化,包括 inline 函数。
-shared 生成共享目标文件。通常用在建立共享库时。
-static 禁止使用共享连接。
-Wall 生成所有警告信息。
-Wmissing-prototypes 当函数在使用前没有函数原型时
-Wmissing-declarations 遗失声明
-D_REENTRANT 
_REENTRANT宏
       在一个多线程程序里,默认情况下,只有一个errno变量供所有的线程共享。在一个线程准备获取刚才的错误代码时,该变量很容易被另一个线程中的函数调用所改变。类似的问题还存在于fputs之类的函数中,这些函数通常用一个单独的全局性区域来缓存输出数据。
       为解决这个问题,需要使用可重入的例程。可重入代码可以被多次调用而仍然工作正常。编写的多线程程序,通过定义宏_REENTRANT来告诉编译器我们需要可重入功能,这个宏的定义必须出现于程序中的任何#include语句之前。
       _REENTRANT为我们做三件事情,并且做的非常优雅:
(1)它会对部分函数重新定义它们的可安全重入的版本,这些函数名字一般不会发生改变,只是会在函数名后面添加_r字符串,如函数名gethostbyname变成gethostbyname_r。
(2)stdio.h中原来以宏的形式实现的一些函数将变成可安全重入函数。
(3)在error.h中定义的变量error现在将成为一个函数调用,它能够以一种安全的多线程方式来获取真正的errno的值。
 
 -D_GNU_SOURCE 使用标准C来编译 ,但链接时候使用GNU的库
 -pipe  使用管道代替临时文件。
 -rdynamic 可用来通知链接器将所有符号添加到动态符号表中
 -c 只编译产生目标文件,不产生可执行文件

 

 

 

一个c语言程序从源文件到生成可执行文件,编译器需要共经历4个步骤:
1) 预处理:把c文件中预处理命令扫描处理完毕,即对源代码文件中的文件包含(#include)、预编译语句(如宏定义#define等)进行分析,此时生成的文件仍然是可读的。
2) 编译:把预处理后的结果编译成汇编或者目标模块,即生成汇编语言文件,此时生成的文件仍然是可读的汇编文件。
3) 汇编:把编译出来的结果汇编成具体CPU上的目标代码模块,也即此时转换成具体的机器语言代码,此时生成的文件是不可读的非文本文件。
4) 连接:把多个目标代码模块连接生成一个大的目标模块,即将多个上面产生的机器代码文件(与其它的机器代码文件和库文件)汇集成一个可执行的二进制代码文件。

    gcc作为c语言在linux下很著名的编译软件,分别有如下option来支持4个步骤:

  名称  gcc选项  英文名称         gcc调用的程序  示例
预处理  -E       Pre-Processing  cpp            gcc -E test.c -o test.i
  编译  -S       Compiling       ccl            gcc -S test.i -o test.s 
  汇编  -c       Assembling      as             gcc -c test.s -o test.o
  连接  无       Linking         ld             gcc test.o -o test

0 0
原创粉丝点击