gcc 选项
2014-10-28 16:26:02| 分类:
Linux
| 标签:
|举报
|字号大中小 订阅
//轉
编译过程一般分为四个阶段:
预处理(也称预编译,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 生成所有警告信息。
评论这张
转发至微博
转发至微博
评论