gcc编译选项

来源:互联网 发布:淘宝有意思的小玩意 编辑:程序博客网 时间:2024/06/07 09:32
 (2012-04-12 12:01:49)
转载
标签: 

杂谈

 
编译过程一般分为四个阶段:
   预处理(也称预编译,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命令中的参数-L2. 再找gcc的环境变量LIBRARY_PATH3. 再找内定目录 /lib /usr/lib /usr/local/lib 这是当初compile gcc时写在程序内的动态链接时、执行时搜索路径顺序:1. 编译目标代码时指定的动态库搜索路径2. 环境变量LD_LIBRARY_PATH指定的动态库搜索路径3.配置文件/etc/ld.so.conf中指定的动态库搜索路径4. 默认的动态库搜索路径/lib5. 默认的动态库搜索路径/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 生成所有警告信息。
0 0
原创粉丝点击