一、库
- 库:相关功能函数的二进制文件集合。
- 库的分类:静态库和动态库。
- 静态库:编译链接时,将库代码复制一份,链接到生成的可执行文件中。
- 优点:可移植性好。
- 缺点:可执行文件较大,占用内存较多
- 动态库:编译时,不会将库链接到可执行文件中,而是生成动态库标记,在程序运行时,由系统区加载动态库再执行。
- 优点:占用内存小,更新库方便
- 缺点:移植性差
(一)库的作用
- 方便、复用性强。
- 安全、代码保密性搞。
(二)静态库的制作
- 库的实现:xxx.c
- 库的声明:xxx.h,函数、类型、宏……的声明。
gcc - c mylib.c -o mylib.o
- 制作库:
ar crs lib库名.a -o 库的实现目标文件
ar crs libmylib.a -o mylib.o
- 静态库的使用:
gcc c程序源文件 -L. -l库名 -o 生成的可执行文件名
gcc main.c -L. -lmylib -lmylib -o main
(三)动态库的制作
- 库的实现:xxx.c
- 库的声明:xxx.h,函数,类型,宏……的声明
- 编译库文件:生成.o目标文件
gcc -fPIC -c mylib.c -o mylib.o
-fPIC:生成与地址无关的可执行代码
- 制作动态库:
gcc -shared -o lib库名.so 库的实现的目标文件
-
动态库的使用:
- 编译:
gcc main.c -L. -lsort -o main.out
- 配置:先配置动态库路径,然后才可以运行。配置系统动态库的搜索路径,在目录/etc/ld.so.conf.d下创建一个配置文件:xxx.conf;并写入一行,动态库路径:pwd mylib命令执行后所得到的路径。
- 执行ldconfig,刷新路径。
- 执行。