呢斯特拉可
unread,May 27, 2009, 8:33:16 AM5/27/09Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to LinkU
常见gcc编译参数收藏
新一篇: 写给三月初十的人 | 旧一篇: 地址转换之TLB基础
一:编译过程的4个阶段:预处理,编译,汇编,链接;
1:最常用的方式
gcc hello.c -o hello
2:预处理后停止编译
gcc -E hello.c -o hello.i(.i通常为已经预处理过的C原始程序)
3:将hello.i编译为目标代码,可以使用-c参数来完成
gcc -c hello.i -o hello.o
也可以使用-x参数让gcc从指定的步骤开始.
4:将生成的目标文件链接成可执行文件
gcc hello.o -o hello
5:多个源文件时
gcc f1.c f2.c -o file
二:gcc参数的警告提示功能
1:-pedantic 使用了ANSI/ISO C语言扩展语法的地方将产生相应的警告信息
2:-Wall 产生尽可能多的警告信息,建议始终带上
3:-Werror 将所有的警告当成错误进行处理
三:库依赖
函数库实际上就是一些头文件和库文件的集合.
-I选项向gcc的头文件搜索路径中添加新的目录
-L选项向gcc的库文件搜索路径中添加新的目录
-l指定链接的库文件名,如 -ldavid 表示指示gcc去连接库文件libdavid.so
-static强制使用静态链接库
动态库文件(.so)和静态库文件(.a)的区别在于程序执行时所需的代码是运行时动态加载的,还是编译时静态加载的.gcc优先使用动态库
四:其他
-On 控制优化代码的生成,n是一个代表优先级别的整数;n取0~3;-O相当于-O1;
-O1 减小代码的长度和执行时间,一般包括线程跳转(Thread Jump)和延迟退栈(Deferred Stack Pops);
-O2 在O1基础上,进行一些额外调整,如处理器指令跳转;
-O3 在O2基础上,循环展开一些其他和处理器特性相关的优化工作;
-pipe:管道,它可以用来同时连接两个程序,其中一个程序的输出将直接作为另一个程序的输入,这样就可以避免使用临时文件,提高编译速度,但编译时
消耗更多的内存.
-Dmacro 定义指定的宏,使它能够通过源码中的#ifdef进行检验
-g3 获得有关调试程序的详细信息
-S 要求编译程序生成来自源代码的汇编程序输出
-v 启动所有报警
-w 禁止所有报警
五:常见错误类型
1:syntex error,语法错误
2:can't find include file,头文件错误
3:ld:lm:No such file or directory,找不到所需的函数库
4:Undefined symbol未定义符号:源代码文件未被包含或编译。