2014年12月11日星期四
语言选项
-x language filename
解释:-x 选项用于指定所使用的编程语言,有c, c++ ,objective-c, c-header等等
举例:gcc –x c hello.c
-x none filename
解释:关闭对所使用语言的明确说明,是上面命令的反操作
举例:gcc -x c hello.cpp -x none hello2.c
预处理选项
-E
解释:预处理后就停止,不进行编译
举例:gcc –E main.c –o main.o
-C
解释:预处理时不去掉注释部分,和-E配合使用
举例:gcc –E –C main.c –o main.o
-MM
解释:显示适合make的规则,描述文件的依赖关系,隐含-E
-H
解释:显示程序中所有包含的头文件,并指出哪些是重复包含的
-Dmacro=defn
解释:定义宏macro的内容为defn, 相当于#define macro defn
举例:gcc –DN=10 main.c –o main
-Umacro
解释:取消宏macro
-dM
解释:输出有效的宏定义列表,必须和-E一起使用
汇编器选项
-S
解释:编译后就停止,不进行汇编
举例:gcc –S main.c –o main.s
(那么问题来了,怎么将生成的汇编语言变成机器语言呢?)
用as命令:as main.s –o main.o
连接器选项
-Wl,option
解释:把选项option传递给连接器。
举例:-Wl,-R /usr/local/lib,告诉程序,我的动态库在这个目录下面
目录选项
-I
解释:指定头文件的位置所在
-l
解释:指定库文件的名字
-L
解释:指定库文件的位置
举例:gcc -o main main.c-L./lib -l My_Lib -I./include
警告选项
-w
解释:禁止所有的警告信息
-Wall
解释:打开编译器几乎所有的警告信息
调试选项
-g
解释:表示在生成的目标文件中带调试信息,gdb调试需要
优化选项
-O0
-O1
-O2
-O3
随着数字的增大,优化级别逐渐增大,-O0是不优化,-O3优化得最多
生成动态库文件选项
-fPIC
解释:使生成的对象模块采用浮动的(可重定位的)地址。
-shared
解释:指定生成动态连接库,linux专有
举例:gcc -Wall -fpic –shared source1.c source2.c –o libMy_lib.so
(生成静态库命令)
ar –r
解释:将所有的.o文件打包,生成静态库
举例:ar –r source1.c source2.c libMy_lib.a
关于库文件需要注意的地方:
1、同时存在静态库和动态库时,默认使用动态库;
2、静态库在编译时要放在有main函数的那个文件后面,动态库在编译时没有位置要求。
3、如果没有指定路径,动态库在使用时才会报错。
4、指定动态库路径的方法:
a)export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./lib
b)修改/etc/ld.so.conf文件
c)编译时指定路径,通过-Wl,-R ./lib告诉连接器