
什么是库?
库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。
本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:
- 静态库
.a[Linux]、.lib[windows] - 动态库
.so[Linux]、.dll[windows]
静态库创建与链接使用
1、静态库创建步骤
(1)在当前目录下写好自己库的 .c / .h 文件

(2)将 .c 文件编译成 .o 文件
gcc -c my_stdio.c
gcc -c my_string.c

(3)创建静态库文件 .a
ar -rc libmylib.a file1.o file2.o file3.o
ar 命令在 Unix 和类 Unix 系统中用于创建、修改和提取静态库文件(.a 文件)。静态库文件是一种包含多个目标文件(.o 文件)的归档文件,通常用于编译和链接过程中。
ar命令即为archive,在软件开发的上下文中,它通常是指这种将多个文件合并成一个文件的过程或结果,旨在便于存储、传输或使用。而在使用 ar 工具时,你实际上是在创建一种特殊的归档文件——静态库,这个库可以在编译其他程序时被链接进去。
ar 命令的常用选项包括:
-r:replace替换或插入文件。如果静态库中已经存在同名的文件,则替换它;如果不存在,则插入新文件。-c:create创建新的静态库文件。如果静态库文件已经存在,则不会报错,而是覆盖原有的文件。
静态库文件的一般写法:
规定文件名需要以 lib 开头,以.a 作为后缀,当然后缀可以继续添加一些数字作为版本号
libmylib.a.1.2
静态库的本质是把所有的 .o 文件打包在一起,意味着该静态库文件中可能包含着很多 .o 文件。
ar -rc libmystdio.a my_stdio.o my_string.o

如果需要让用户使用你编写的库,只需将头文件和库文件给用户即可,无需给源文件
2、静态库的链接使用
(1)把头文件和库安装到系统
安装的本质其实就是拷贝!
- 将头文件安装到
/usr/include/
sudo cp *.h /usr/include/
查询已安装成功

- 将自己的库安装到
/lib64/
sudo cp libmystdio.a /lib64/
查询已安装成功

(2)使用自己的库
写一个 main.c 试验一下自己写的库
#include<my_stdio.h>
#include<my_string.h>
#include<stdio.h> // 因为要使用 printf
int main()
{
const char* str = "hello Linux";
printf("%s : %d\n", str, mystrlen(str));
mFILE* mf = mfopen("./log.txt", "w");
mfwrite(str, mystrlen(str), mf);
mfclose(mf);
return 0;
}
链接第三方库 -l
但是 gcc 编译时,报错了,静态库报错属于链接报错
gcc -o test main.c

实际上,我们系统的库一般都在系统目录


1377

被折叠的 条评论
为什么被折叠?



