Linux gcc编译常用编译命令
谢凡凡 2010-10-28 于西安高新区冉科公司
gcc命令格式:gcc [options][filename]
-x language 指定使用的语言(c,c++或汇编)
-c 只对文件进行编译和汇编,生成.o目标文件,但不进行链接操作
-S 只对文件进行编译,但不汇编和链接,生成汇编文件.s
-E 只对文件进行预处理,但不编译汇编和链接,
-o [file1] file2 将文件file2编译成可执行文件file1
-L library 指定所使用的库文件的路径
-I directory 为include文件的路径
-w 禁止警告信息
-pedantic 严格要求符合ansi标准
-Wall 显示警告信息
-g 插入调试信息,便于调试
-p 产生prof所需的信息
-pg 产生grpof所使用信息
-O(O1) 对编译出的代码进行优化
-O2 比-O高一级的优化
-O3 产生更高级别的优化
-v 显示gcc版本
-m*** 根据不同的微处理器进行优化
gcc优化代码:-O1,-O2,-O3
优点:代码优化,程序运行更快
缺点:
-
优化级别越高,编译时间越长(提示:开发时不要优化,最终发行时,才进行优化)
-
优化级别越高,越消耗内存
-
使用优化选项,调试不方便
高级gcc选项:
管理大型项目最好用make
-
指定查找路径
Eg:包含zw.h,在路径/usr/include/zw
gcc –Wall –I/usr/include/zw –o test test.c
指定链接库,给出链接库的路径,并告诉链接库的名字:
gcc –L/usr/x11/lib –Wall –o test test.c –lx11
-
链接库
程序中链接库,使用-l选项,链接库可以是静态的,也可以是动态的。
链接数学库
gcc –o test test.c –lm
-
使用管道
管道实现的是使管道前的输出成为管道后的输入(一个程序的输出作为另外一个程序的输入)
gcc -pipe –o testtest.c
gcc编译流程:
-
C预处理器cpp
C预处理器cpp用来完成宏的求值、条件编译以及其它在编译前完成的工作。可以完成:解释宏,处理包含文件,处理#if和#ifdef等。通常gcc自动调用cpp,也可以通过gcc –E调用。
-
gun连接器ld
连接器将许多独立的模块组合成为一个可执行文件,gcc自动调用ld,也可以手动调用ld,更好控制连接过程。
-
GUN汇编器as
Gcc编译产生汇编代码,as处理汇编代码,得到目标文件二进制文件),最终生成可执行文件。通常情况下gcc调用。
4、文件处理器ar
可以使用ar程序建立静态库,把几个小文件组合成一个大文件。建立静态库时,必须把多个.o文件组合成一个单独的.a文件。
5、库显示ldd
查看一个可执行程序使用的共享库。
Eg:ldd ./test