gcc基本编译命令

来源:互联网 发布:js dom 添加属性 编辑:程序博客网 时间:2024/04/26 07:46

本文转自:http://www.cnblogs.com/helei/archive/2011/06/04/2072867.html


1. gcc  -o  hello  hello.c

gcc  hello.c  -o  hello

2. 头文件:

头文件提供对常量的定义和对系统及库函数调用的声明,对C程序来说,标准头文件位置一般为/usr/include及其子目录,如果头文件不在编译器自动搜索的目录里,则可用-I标志指定,例如:

gcc   -I/usr/openwin/include fred.c

3. 库文件

库是一组预先编译好的函数的集合,标准系统库文件一般存储在/lib和/usr/lib目录中,默认情况下链接程序只搜索标准C语言库, 库文件的名字总是以lib开头, 随后的部分指名这是什么库,文件名的最后部分以.开始, 然后给出库文件的类型:
.a: 静态库, 类似于Windows中的.LIB文件

.so: 共享库, 类似于Windows中的.DLL文件

可通过以下三种方式显示指定链接库位置:

(1)gcc  -o  fred  fred.c  /usr/lib/libm.a

(2)gcc  -o  fred  fred.c  -lm 会优先链接标准库目录中名为libm.so的函数库

(3)gcc  -o  x11fred  -L/usr/openwin/lib  x11fred.c   -lx11  增加/usr/openwin/lib为库搜索路径

4. 创建静态库

步聚:

(1)编写源文件, 如bill.c fred.c

(2)-c编译为目标文件, 例gcc -c bill.c fred.c

(3)为库文件创建头文件, 最好把头文件包邻含进源文件中, 有助于编译器发现错误

(4)用ar程序创建一个归档文件并将目标文件添加进去

ar  crv  libfoo.a  bill.o  fred.o

(5)对于非GNU的软件开发工具, 还要为库函数生成一个内容表

ranlib libfoo.a

5. nm命令可察看目标文件, 函数库, 可执行文件里包含的函数

6. gcc能编译链接C程序, gcc能编译C++源程序, 但不能自动的C++程序使用的库链接, 所以常使用g++来编译链接C++程序

7.警告

-W: 全面警告

-w: 关闭警告

-Wall: 常规警告信息

8.优化

-O0  : 默认不优化(若要生成调试信息,最好不优化)

-O1  : 简单优化,不进行速度和空间的权衡优化; 

-O2  : 进一步的优化,包括了调度。(若要优化,该选项最适合,他是GNU发布软件的默认优化级别;

-O3  : 鸡肋,兴许使程式速度更慢;

-funroll-loops  : 展开循环,会使可执行文档增大,而速度是否增加取决于特定环境;

-Os  : 生成最小执行文档;

一般来说,调试时不优化,一般的优化选项用-O2(gcc允许-g和-O2联用,这也是GNU软件包发布的默认选项),embedded能够考虑-Os。

测试优化效果, time命令

time测量指定程式的执行时间,结果由三部分组成:

    real : 进程总的执行时间, 他和系统负载有关(包括了进程调度,转换的时间)

    user: 被测量进程中用户指令的执行时间

    sys  : 被测量进程中内核代用户指令执行的时间

user和sys的和被称为CPU时间.

9.编译预处理及生成汇编代码

gcc -E hello.c  在控制台显示预处理后结果

gcc -S hello.c 生成hello.s的汇编源文件

10.调试选项

-g


原创粉丝点击