一、gcc命令使用格式:
gcc [选项] [文件] [选项] [文件]
-E | 对源文件进行预处理 |
-c | 对源文件进行编译或汇编 |
-S | 对源文件进行编译 |
-o file | 输出目标文件file |
-w | 屏蔽所有警告信息 |
-Wall | 显示所有类型警告信息 |
-O0 | 不进行优化(默认) |
-O1 |
|
-O2 |
|
-O3 |
|
-L | 指定搜索路径 |
二、<> 与 ” ” 区别
1.< >一般用于标准的头文件,表示在系统配置的头文件目录中搜索,找不到则报错
2.” ”一般用于自己编写的程序,表示先在当前目录搜索,搜索不到则在系统配置的目录中寻找
虽然” ” 可以用于在系统配置目录搜索,但是因为需要先在当前目录搜索,会降低运行效率,因此“ ” 一般用于自己编写的程序,< > 用于标准的头文件。
三、如何写一个头文件,方法有两个:
方法1
先建立一个后缀为.c的文件,文件名为add.c,用于书写函数,内容如下
然后建立一个后缀为.h的文件,文件名为add.h,用于声明函数,内容如下
再建立一个c程序main.c引用该头文件,内容如下
最后同时对main.c add.c进行编译
运行结果如下
方法2
建立一个后缀为.h的文件,add.h,内容如下
建立main.c
此时只需编译main.c,即可得到结果
四、库文件
库文件的特点:看不到库文件里定义的函数和变量,但是可以调用其中的函数
不同位置存储的库文件的作用:
1.根目录下库文件/bin:系统运行所依赖的库文件
2./usr/bin:程序软件运行所依赖的库文件
静态库与动态库的区别:
1.使用时机
静态库:后缀名为.a,在编译时将库文件中的代码搬迁到执行文件中。
动态库:后缀名为.so,在执行时将需要的库文件中的代码搬迁到执行文件中。
2.其他区别:
静态库 | 动态库 |
可执行文件体积大 | 可执行文件体积小 |
可执行文件运行效率高 | 运行效率低 |
不易升级,使用需重新编译 | 易于升级 |
编译速度慢 | 编译速度快 |
代码布局更方便 | 布局较难 |
总结:需要频繁升级,或者有多个源文件需要调用函数库,使用动态库;
需要较高的执行效率,只有少数源文件需要调用函数库,使用动态库。
制作库文件(以建立add库函数为例):
1.制作静态库:(1)gcc -c add.c (生成add.c的汇编文件)
(2)ar rcs libadd.a add.c (把add.o封装到库里)
(3)gcc main.c -ladd.a -L. (使main.c链接到libadd.a库(使用库))
PS:1.头文件不进行声明依然可以执行程序,会出现如下警告
2.-L. 为库文件当前所在目录,若在其他目录需要指定其路径
2.制作动态库:(1)gcc -shared -fIPC add.c -o libadd.so (制作add.c动态库)
(2)gcc main.c ./libadd.so (使用动态库)