前言
1.编译器gcc
静态库和动态库的制作与使用
2.调试器gdb
常用命令、调用内存错误
3.工程管理器make
makefile编写、多目录的makefile的编写
一、库文件
- 库文件:保存函数和变量,里面的函数和变量只能使用,但是看不到其实现
- 库函数(保存在库文件):printf scanf strcat
- 库文件的分类
静态库.a 保存的函数和变量,在编译阶段加载到可执行文件中
动态库.so 保存的函数和变量,在执行阶段加载到可执行文件中
- 使用静态库和动态库的区别(可执行文件的区别)
- 使用静态库编译出来的文件大小 > 使用动态库编译出来的可执行文件大小(影响:内存的开销)
- 使用静态库编译出来的执行文件速度 >(快于) 使用动态库编译出来的执行文件速度
- 使用静态库编译出来的执行文件升级 < 使用动态库编译出来的可执行文件升级
- 使用静态库编译出来的执行文件程序部署 > 使用动态库编译出来的可执行文件程序部署
库文件的存放路径:系统运行所需要的的库文件:/lib
第三方软件和工具运行所需要的的库:/usr/lib
编译时,编译器会自动到这两个目录里找所需要链接的库文件
1.1 制作静态库
- 将目标源文件编译成目标文件:gcc -c 目标源文件1 目标源文件2 (gcc -c add.c)
- 使用ar工具制作静态:ar -rcs(库不存在就创建,存在就更新)所要生成的库文件的名字(lib+库名+后缀.a) 目标文件
ar -rcs libadd.a add.o
1.2 使用静态库
-l:指定加载哪个静态库 -l库名(gcc demo.c -ladd)
-L:指定加载的库文件的存放路径(gcc demo.c -ladd -L/root/205/1107/)
1.3创建动态库
gcc -shared -fPIC -o 库名.so 源文件.c
1.4使用动态库
gcc 源文件.c ./库名.so -o 可执行文件名
练习
- 将add.c制作成静态库并使用
- 将sub.c add.c制作成libcal.a静态库并使用
- 按照图片,制作动态库