静态库、动态库制作

库介绍

静态库和动态库是软件开发中常用的两种库文件形式。静态库(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、

从这可以看出,静态库体积很大。

  • 23
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
静态库动态库是在软件开发中常用的两种库文件形式。下面我会分别介绍一下它们的制作过程。 1. 静态库制作静态库是在链接时被完整地复制到可执行程序中的库文件,它包含了函数和数据的实现。静态库制作分为以下几个步骤: - 编写源代码并编译成目标文件(.o或.obj文件):使用编译器将源代码编译成目标文件。例如,使用 GCC 编译器可以执行以下命令:`gcc -c mylib.c -o mylib.o`。 - 将目标文件打包成静态库文件:使用静态库打包工具(如ar)将目标文件打包成静态库文件。例如,使用 ar 工具可以执行以下命令:`ar rcs libmylib.a mylib.o`。这将生成名为 libmylib.a 的静态库文件。 - 将生成的静态库文件与头文件一起发布:将生成的静态库文件 libmylib.a 与相关的头文件一起提供给其他开发者使用。 2. 动态库制作动态库是在运行时被动态加载的库文件,它可以在多个程序之间共享。动态库制作分为以下几个步骤: - 编写源代码并编译成目标文件(.o或.obj文件):同样,使用编译器将源代码编译成目标文件。例如,执行以下命令:`gcc -c -fPIC mylib.c -o mylib.o`。注意,这里加入了 `-fPIC` 参数,以生成位置无关的代码。 - 将目标文件打包成动态库文件:使用动态库打包工具(如gcc)将目标文件打包成动态库文件。例如,执行以下命令:`gcc -shared mylib.o -o libmylib.so`。这将生成名为 libmylib.so 的动态库文件。 - 将生成的动态库文件与头文件一起发布:将生成的动态库文件 libmylib.so 与相关的头文件一起提供给其他开发者使用。 制作完成后,其他开发者可以使用静态库动态库来链接到他们的程序中,以使用库中提供的函数和数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值