Linux--动静态库的原理和使用详解

本文介绍了Linux系统中动态库与静态库的概念、原理以及使用方法。通过深入讲解动态库与静态库的区别和优劣势,帮助读者更好地理解并选择合适的库类型来进行软件开发。

动态库和静态库的概念

  1. 动态库(Dynamic Link Library,简称DLL):在运行时加载的库文件,不会被复制到可执行程序中,可以被多个程序共享使用。
  2. 静态库(Static Library):在编译时被链接到目标代码中的库文件,会被复制到可执行程序中,每个程序都有自己的副本。
    在这里插入图片描述

动静态库的使用和制作

具体步骤

  1. 创建源代码文件:首先,编写你的库的源代码文件,可以是一个或多个源码文件。这些文件包含了你想要封装在库中的函数、变量和其他定义。

  2. 编写头文件:创建一个头文件(通常以.h作为文件扩展名),用于存放库的接口声明。在头文件中定义公共的结构、函数原型和常量。

  3. 编译源代码文件:使用合适的编译器对源代码文件进行编译,生成目标文件(通常以.o作为文件扩展名)。例如,在Linux上可以使用gcc命令进行编译,如:gcc -c file1.c file2.c

  4. 创建静态库:将所有的目标文件打包成一个静态库文件(通常以.a作为文件扩展名)。使用ar命令创建静态库,如:ar rcs libyourlibrary.a file1.o file2.o。其中,'libyourlibrary.a’是静态库的名称,'file1.o’和’file2.o’是目标文件。

  5. 创建动态库:将所有的目标文件编译成一个动态链接库文件(通常以.so作为文件扩展名)。使用合适的编译器和链接器创建动态库,如:gcc -shared -o libyourlibrary.so file1.o file2.o。其中,'libyourlibrary.so’是动态库的名称,'file1.o’和’file2.o’是目标文件。

  6. 使用静态库:在编译可执行程序时,将静态库链接到程序中。例如,在使用gcc编译时添加’-L’选项指定库的路径,'-l’选项指定库的名称,如:gcc -o myapp main.c -L/path/to/library -lyourlibrary

  7. 使用动态库:在编译可执行程序时,可以使用静态方式链接动态库,也可以在运行时动态加载动态库。在使用gcc编译时添加’-L’选项指定库的路径,'-l’选项指定库的名称,如:gcc -o myapp main.c -L/path/to/library -Wl,-rpath,/path/to/library -lyourlibrary

实例操作

在这里插入图片描述
在这里插入图片描述

前章内容:重定向和文件缓冲

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

创建静态库

在这里插入图片描述

创建动态库

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

动静态库同时存在

在这里插入图片描述
在这里插入图片描述

动态库与静态库的区别

  1. 文件大小:动态库较小,静态库较大。
  2. 内存占用:动态库在运行时加载,不会占用程序的内存;而静态库会被完全加载到程序的内存中。
  3. 载入速度:动态库的载入速度较慢,因为需要在运行时进行加载和链接;而静态库的载入速度较快,因为已经被编译并链接到程序中。
  4. 更新与维护:动态库的更新只需替换库文件,不需要重新编译程序;而静态库的更新需要重新编译整个程序。
  5. 可重定位性:动态库可以在不同的系统上使用,因为动态链接器会解析库的依赖关系;而静态库需要重新编译适配不同的系统。

动态库的加载

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

动态库与静态库的选择

  1. 动态库适合需要共享使用的库,减少内存占用
  2. 静态库适合需要独立部署的程序,减少运行时的依赖
  3. 根据项目需求和系统环境特点综合考虑选择。
  • 36
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 28
    评论
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诡异森林。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值