分类: 嵌入式
2011-07-25 21:58:58
1. 预处理
预处理程序cpp是来展开宏等其他操作,(-E选项表示预处理后停止编译过程)
$gcc –E hello.c –o hello.cpp
2. 适当编译
3. 汇编
将hello.cpp 编译为目标代码,(-x选项声明从指定的步骤开始编译,这里为,cpp-output)
$gcc –x cpp-output –c hello.cpp –o hello.o
4. 链接
$gcc hello.o –o hello
.c, / .C, .cc | c/c++ 源代码 |
.i, / .ii | 预处理后的 c/c++ 源代码 |
.S, .s | 汇编 源代码 |
.o | 目标 代码 |
.a, .so | 库 代码 |
-o | 目标代码 |
-c | 只编译不链接 |
-DFOO=BAR | 定义预处理宏 |
-IDIRNAME | include 包含目录 |
-LDIRNAME | include 库目录 |
-static | 只链接静态库 |
-lFOO | 链接libFOO.so的库 |
-g | 包含标准调试信息 |
-ON | 优化编译(0<=N<=3), 默认为1 |
-w | 关闭所有警告 |
-Wall | 开启所有警告 |
-Werror | 把所有警告报告为错误 |
-fsyntax-only | 只检查语法而不进行编译 |
-MM | 输出一个make兼容的相关列表(没反应?) |
-v | 显示编译用到的每一步命令(好多,没多大必要) |
$gcc main.c –L/home/ubuntu/lib –I/home/ubuntu/include –lnew –o main
$gcc main.c –L/home/ubuntu/lib –I/home/ubuntu/include –lnew –static –o main
-finline-functions | 把所有简单函数在通用它们的函数中就地展开 |
-funroll-loops | 展开所有能在编译时确定重复次数的循环体 |
-fomit-frame-pointer | 如果函数不需要则丢掉帧指针 |
。。。 | 。。。 |
内联和循环展开技术能大大提高程序的执行速度。
在上表中是比较详细的针对性选项。一般情况下,最好选择定义好的-O1, –O2, –O3, 即可。用O2的比较多。
-g | 标准调试信息 |
-p | 加入prof程序能够识别的剖析符号信息 |
-pg | 加入gprof程序能够识别的剖析符号信息 |