gcc学习笔记(转)

gcc使用方法
1:预编译
gcc -E hello.c -o hello.i
2:将hello.i编译成目标代码
gcc -c hello.i -o hello.o
3:生成可执行文件
gcc hello.o -o hello
4查看结果
./hello


gcc foo1.c foo2.c -o foo
等同于
gcc -c foo1.c -o foo1.o
gcc -c foo2.c -o foo2.o
gcc foo1.o foo2.o -o foo

警告提示方法
1 -pedantic(在扩展语法的地方产生相应的警告信息)
gcc -pedantic illcode.c -o illcode
2:-Wall (使gcc产生尽可能多的错误信息)
gcc -Wall illcode.c -o illcode
3:-Werror(要求gcc对所有的警告当成错误进行处理)
4:gcc -Wall -Werror illcode.c -o illcode


库依赖
linux下的大多数函数都默认将头文件放到/usr/include/目录下,而库文件放到/usr/lib/目录下
gcc 的-I选项可以向gcc的头文件搜索路径中添加新的目录。
gcc foo.c -I /home/xiaowp/include -o foo

gcc foo.c -L /home/xiaowp/lib -lfoo -o foo
gcc foo.c -L /home/xiaowp/lib -static -lfoo -o foo

代码优化
-On
n是一个代表优化级别的整数
-O可以告诉GCC同时减小代码的长度和执行时间,其效果等价于-O1
选项-O2告诉GCC除了完成所有-O1级别的优化之外,同时还要进行一些额外的调整工作,如处理器指令调度等。
选项-O3告诉GCC除了完成所有-O2级别的优化之外,还包括循环展开和其它一些与处理器特性相关的优化工作。
通常来说,数字越大优化的级别越高,同时也意为着程序的运行速度越快。许多linux程序员用-O2选项


调试
-g 或者 -ggdb
-g1:不包含局部变量和与行号有关的调试信息,因此只能用于回溯跟踪和堆栈转储之用。回溯跟踪指的是监视程序在运行过程中的函数调用历史,堆栈转储则是一种以原始的十六进制格式保存程序执行环境的方法,两者都是经常用到的调试手段
-g2:此时产生的调试信息包括扩展的符号表,行号,局部或外部变量信息。
-g3:包括级别2中的所用调试信息,以及源代码中定义的宏
-ggdb 和-g的调试级别完全一样

gdb调试步骤:
1:gcc -g crash.c -o -crash
./crash
***
gdb crash(可执行文件)
run
backtrace(回溯跟踪命令)
quit (退出)
调试时可能会用到编译器产生的中间结果,这是可以使用-save-temps选项,让gcc将预处理代码,汇编代码,和目标代码都作为文件保存起来。
gcc -save-temps crash.c -o crash
ls crash(显示crash.c的相关文件:预处理代码,汇编代码,和目标代码)

 

posted @ 2010-11-10 13:28  WenEric  阅读(214)  评论(0编辑  收藏  举报