库是一个二进制文件,其所包含的代码可以被程序调用。
Linux下有两种库,分别为静态库和动态库。
1 静态库
1.1 特点
1. 编译时会将静态库的代码直接编译到可执行文件中,所以程序运行时无需加载库,使得运行速度略快
2. 会占用更多的内存空间,同时静态库升级时整个程序都需要重新编译
1.2 创建静态库
1. 编写源代码
2. 生成相对应的.o文件
gcc -c text.c -o text.o
3. 创建命名
ar crs libtext.a text.o
ar | 库文件维护程序的名称 |
c | 创建一个库(无论库是否存在) |
r | 在库中插入模板 |
s | 创建目标文件索引(在创建较大的库中可以加快时间) |
4. 链接静态库
gcc main.c -o main -L. -ltext
其中 -L 表示当前路径
5. 运行
./可执行文件
2. 动态库(共享库)
2.1 特点
1. 编译时仅记录使用那个动态库,仅在运行时加载共享库,所以程序不包括代码所占内存小
2. 库的升级方便,无需将程序整体编译
3. 使用广泛
2.2 创建动态库
1. 编写源代码
2. 将源代码生成相应的.o文件
gcc -c -fPIC text.c -o text.o
-fPIC :生成与位置无关的代码,可以在任何位置运行
3. 创建动态库
命名规范: lib 库名.so.版本号 //版本号数字
4. 指定生成动态连接 -shared
gcc -shared -o libtext.so.1 text.o
5. 给共享创建软连接(使得编译器在编译的时候可以找到共享库)
ln -s /home/linux/IO/libtext.so.1 text.o
6. 编译
gcc main.c -o main -L. -ltext
7. 运行
./可执行文件
8. 将动态库拷贝到系统路径下
sudo cp libtext.so /usr/lib