登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

BCB-DG's Blog

...

 
 
 

日志

 
 

gcc 选项  

2014-10-28 16:26:02|  分类: Linux |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
//轉

编译过程一般分为四个阶段:

   预处理(也称预编译,Preprocessing)
    gcc -E test.c -o test.i 或 gcc -E test.c
   编译(Compilation)
    gcc -S test.i -o test.s
   汇编 (Assembly)
   gcc -c test.s -o test.o
   连接(Linking)
   gcc test.o -o test

   如果不希望产生中间的.i、.s、.o文件,则可以直接用:
   gcc test.c -o test

   多个文件,可以使用如下命令实现:
   gcc test1.c test2.c -o test

   此命令等价于:
   gcc -c test1.c -o test1.o
   gcc -c test2.c -o test2.o
   gcc test1.o test2.o -o test

检错:
   gcc -pedantic illcode.c -o illcode  

   -pedantic编译选项并不能保证被编译程序与ANSI/ISO C标准的完全兼容,它仅仅只能用来帮助Linux程序员离这个目标越来越近。或者换句话说,-pedantic选项能够帮助程序员发现一些不符合 ANSI/ISO C标准的代码,但不是全部,事实上只有ANSI/ISO C语言标准中要求进行编译器诊断的那些情况,才有可能被GCC发现并提出警告。

  GCC还有一些其它编译选项也能够产生有用的警告信息。这些选项大多以-W开头,其中:

   -Wall了,使用它能够使GCC产生尽可能多的警告信息,使用如下:

   gcc -Wall illcode.c -o illcode

   在编译程序时带上-Werror选项,那么GCC会在所有产生警告的地方停止编译,迫使程序员对自己的代码进行修改,如下:

   gcc -Werror test.c -o test

库文件链接:

  -I 包含头文件路径,使用如下:

    gcc –c –I /usr/dev/mysql/include test.c –o test.o

  -L 包含库文件路径,使用如下:   

    gcc –L /usr/dev/mysql/lib –lmysqlclient test.o –o test

    -lmysqlclient说明链接名称为libmysqlclient的链接库

   Linux下的库文件分为两大类分别是动态链接库(通常以.so结尾)和静态链接库(通常以.a结尾),二者的区别仅在于程序执行时所需的代码是在运行时动态加载的,还是在编译时静态加载的。

   默认情况下, GCC在链接时优先使用动态链接库,只有当动态链接库不存在时才考虑使用静态链接库,如果需要的话可以在编译时加上-static选项,强制使用静态链接库,使用如下:

   gcc –L /usr/dev/mysql/lib –static –lmysqlclient test.o –o test

   库的搜索路径:

   静态库链接时搜索路径顺序:

   1. ld会去找GCC命令中的参数-L

   2. 再找gcc的环境变量LIBRARY_PATH

   3. 再找内定目录 /lib /usr/lib /usr/local/lib 这是当初compile gcc时写在程序内的

   动态链接时、执行时搜索路径顺序:

   1. 编译目标代码时指定的动态库搜索路径

   2. 环境变量LD_LIBRARY_PATH指定的动态库搜索路径

   3.配置文件/etc/ld.so.conf中指定的动态库搜索路径

   4. 默认的动态库搜索路径/lib

   5. 默认的动态库搜索路径/usr/lib

   有关环境变量:

   LIBRARY_PATH环境变量:指定程序静态链接库文件搜索路径

   LD_LIBRARY_PATH环境变量:指定程序动态链接库文件搜索路径


-ansi 只支持 ANSI 标准的 C 语法。这一选项将禁止 GNU C 的某些特色,例如 asm 或 typeof 关键词。

-c 只编译并生成目标文件。

-DMACRO 以字符串“1”定义 MACRO 宏。

-DMACRO=DEFN 以字符串“DEFN”定义 MACRO 宏。

-E 只运行 C 预编译器。

-g 生成调试信息。GNU 调试器可利用该信息。

-IDIRECTORY 指定额外的头文件搜索路径DIRECTORY。

-LDIRECTORY 指定额外的函数库搜索路径DIRECTORY。

-lLIBRARY 连接时搜索指定的函数库LIBRARY。

-m486 针对 486 进行代码优化。

-o FILE 生成指定的输出文件。用在生成可执行文件时。

-O0 不进行优化处理。

-O 或 -O1 优化生成代码。

-O2 进一步优化。

-O3 比 -O2 更进一步优化,包括 inline 函数。

-shared 生成共享目标文件。通常用在建立共享库时。

-static 禁止使用共享连接。

-UMACRO 取消对 MACRO 宏的定义。

-w 不生成任何警告信息。

-Wall 生成所有警告信息。
  评论这张
 
阅读(855)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018