Chinaunix首页 | 论坛 | 博客
  • 博客访问: 142155
  • 博文数量: 40
  • 博客积分: 1131
  • 博客等级: 少尉
  • 技术积分: 459
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-16 11:50
文章分类
文章存档

2012年(2)

2011年(38)

我的朋友
GCC

分类: 嵌入式

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程序能够识别的剖析符号信息
阅读(1041) | 评论(0) | 转发(0) |
0

上一篇:日志

下一篇:Make

给主人留下些什么吧!~~