当前位置: 首页 > news >正文

Linux - 第6节 - 动态库和静态库

1.静态库与动态库概念

静态库(.a):
程序在编译链接的时候把库的代码拷贝到可执行文件中。程序运行的时候将不再需要静态库。
动态库(.so):
程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。
注:
1.一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目标文件的整个机器码。也就是说如果可执行程序是动态链接生成的,程序里面如果涉及到外部函数调用,可执行程序中记录的是外部函数的地址,外部函数具体的实现还在动态库中。
2.在可执行文件开始运行以前,外部函数的机器码由操作系统从磁盘上的该动态库中复制到内存中,这个过程称为动态链接(dynamic linking)。
3.动态库可以在多个程序间共享,所以动态链接使得可执行文件更小,节省了磁盘空间。操作系统采用虚拟内存机制允许物理内存中的一份动态库被要用到该库的所有进程共用,节省了内存和磁盘空间。


2.生成动静态库

2.1.生成静态库

以往的写法:

创建一个mklib目录,在该目录下创建静态库。在mklib目录下创建mymath.h、mymath.c文件,mymath.h文件写入下图一所示的代码,mymath.c文件写入下图二所示的代码。

创建一个test.c文件,写入下图三所示的代码,创建makefile文件,写入下图四所示的代码。使用make命令生成可执行程序,然后使用./test执行该程序,运行结果如下图五所示。

注:在mymath.c文件中,我们在for循环体内定义了i变量,如果gcc版本低可能会报错,如下图所示,要解决该问题,我们在makefile文件中生成可执行程序的gcc命令行后面带上-std=c99,如下图二所示,即采用c99标准进行编译。

 

静态库的写法:

创建一个mklib目录,在该目录下创建静态库。在mklib目录下创建mymath.h、mymath.c、myprint.h、myprint.c文件,mymath.h文件写入下图一所示的代码,mymath.c文件写入下图二所示的代码,myprint.h文件写入下图三所示的代码,myprint.c文件写入下图四所示的代码。

创建makefile文件,写入下图五所示的代码,

 

 

 

 

2.2.生成动态库

http://www.lryc.cn/news/34691.html

相关文章:

  • 【Java学习笔记】12.Character 类及String 类
  • 【C++修炼之路】26.C++11(语法糖)
  • KD610精密油介损体积电阻率测试仪
  • 快速了解原码、反码、补码和位运算
  • 算法的复杂度介绍
  • 教你如何搭建店铺—收支管理系统,demo可分享
  • java性能分析-堆内存最佳实践-堆分析
  • 3月8号作业
  • Flink相关介绍
  • Java 8 排序
  • Blazor_WASM之4:路由
  • 对Vue响应式的理解
  • 磁盘阵列Raid探讨
  • 基于MyBatis依次、批量、分页增删改查
  • Tomcat源码分析-Session源码解析
  • 常见数据模型
  • Lesson 8.3 ID3、C4.5 决策树的建模流程 Lesson 8.4 CART 回归树的建模流程与 sklearn 参数详解
  • 阿里云手机短信登录
  • Android Camera SDK NDK NDK_vendor介绍
  • SQL基础语句小结
  • 管理类书籍推荐
  • win10 mingw 调用python
  • 教你使用三种方式写一个最基本的spark程序
  • 软件设计师错题集
  • 【华为机试真题详解 Python实现】静态扫描最优成本【2023 Q1 | 100分】
  • 算法刷题总结 (四) 动态规划
  • Grafana 转换数据的工具介绍
  • Linux 学习笔记
  • HTML注入专精整理
  • 看完这篇我不信你不会二叉树的层序遍历【C语言】