库介绍
静态库和动态库是软件开发中常用的两种库文件形式。静态库(static library)是在编译时被链接到程序中的库,它包含了一组预编译的目标代码,这些代码将直接复制到最终的可执行文件中。静态库的优点是简单易用,只需将库文件链接到程序中即可,无需额外的运行时依赖。然而静态库的缺点是会导致可执行文件的体积增大,并且在多个程序中使用相同的静态库会造成重复代码。
动态库(dynamic library)是在程序运行时被加载到内存中并链接的库,它包含了一组共享的目标代码,可以被多个程序共享使用。与静态库相比,动态库的主要优点是能够在运行时动态加载和卸载,从而实现代码的共享和更新。此外,动态库还可减少可执行文件的体积,因为程序只需要引用动态库的链接信息而非赋值其代码。但是,使用动态库需要在系统中存在对应的库文件,并且程序在运行时依赖于这些库文件的存在。
在实际的开发中,选择使用静态库还是动态库取决于具体的需求和项目要求。如果程序对文件体积敏感,或需要独立开发,则可以选择静态库。如果需要灵活的共享和更新代码,或者需要在运行时插拔功能模块,则可以选择动态库。
库原理
静态库
动态库
静态库制作
1、先创建三个文件,分别是含有main函数的文件、头文件和源文件
code.c
#include<stdio.h>
#include"temp.h"
int main()
printf("%d\n",my_add(100,200));
printf("%d\n",my_sub(100,200));
printf("%d\n",my_mul(100,200));
printf("%d\n",my_div(100,200));
return 0;
}
static.c
#include"temp.h"
int my_add(int a,int b){
return a+b;}
int my_sub(int a,int b){
return a-b;}
int my_mul(int a,int b){
return a*b;}
int my_div(int a,int b){
return a/b;}
temp.h
extern int my_add(int a,int b);
extern int my_sub(int a,int b);
extern int my_mul(int a,int b);
extern int my_div(int a,int b);
2、
#将源文件static.c制作成 二进制文件
gcc -c static.c -o static.o
#将二进制文件 生成静态库
ar rc libstatic.a static.o
"ar rc"简介
“ar rc” 是一个用于创建静态库的命令行工具操作。
“ar” 是 Archive(归档)的缩写,它用于创建、管理和操作库文件。“rc” 是 ar 命令的选项之一,具有以下含义:
- “r” 表示将文件插入到库中。当使用 “ar rc” 命令时,它会将指定的文件插入到库中,如果库已存在,则会替换库中已有的同名文件。
- “c” 表示创建库。如果库文件不存在,则会创建一个新的库文件。
2.1、制作demo
操作demo
放入自定义的目录(注意头文件也需要注明,-I是头文件路径,-L是库路径)
动态库制作
gcc -shared dynamic.c -o libdynamic.so
制作demo
操作demo
(注意:动态库还需要设置变量,指定动态库的路径,这里为当前路径)
放入自定义的目录(也需要设置环境变量)
注意:这里是在test目录下 ,一个静态库,一个动态库,默认使用动态库链接
验证(这里我把库名设为一样的,都是-ltemp)
1、
2、
此处把生成的可执行文件名更改,防止命名冲突 ,这里改为1和2,静态库使用加-static
3、
从这可以看出,静态库体积很大。