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

【浅学Linux】动态库与静态库的封装与使用

朋友们好,这里简单介绍一下LINUX学习中关于动态库与静态库的理解,以及站在封装和使用的角度去介绍是如何封装的?如何使用的?

文章目录

  • 一:动态库与静态库的理解
  • 二:静态库
    • 2.1:静态库的使用
    • 2.2:静态库的封装
  • 三:动态库
    • 3.1:动态库的使用
    • 3.2:动态库的封装

一:动态库与静态库的理解

  • 静态库:程序在编译链接的时候把库的代码链接拷贝到可执行文件中,程序运行的时候将不再需要静态库。
  • 动态库:程序运行的时候才去链接动态库的代码,多个程序共享使用库的代码。

我们先来理解几个问题:
1️⃣:库里面需不需要main函数?
不需要!

2️⃣:什么是链接?
就是把所有的.o文件链接形成一个可执行程序。

3️⃣:将我的所有.O文件给别人,别人可以使用吗?
可以!

4️⃣:你在使用库的时候,需要用到什么?
库文件和头文件。

二:静态库

2.1:静态库的使用

gcc 或者g++ 只认识系统库,不认识其他第三方库,所以我们想要使用对应的静态库的话,怎么做呢?
方式一:
库的安装! 也就是将对应的头文件和库文件拷贝到系统路径下!
方式二:
指定路径, 大写的-i 头文件路径 大写的-L 库路径, 小写的l指定库名!
在这里插入图片描述

2.2:静态库的封装

在makefile中,根据对应的依赖关系以及依赖方法生成对应的.a文件和.O文件!
在这里插入图片描述
ar是gnu归档工具,rc表示(replace and create)。
总结一下就是将源文件翻译成.O文件以后把所有的.O文件打包起来即可!

三:动态库

3.1:动态库的使用

编译选项:

  • I:链接动态库,只要库名即可(去掉lib以及版本号)。
  • L:链接库所在的路径。
    示例:gcc main.o -o main -L. -lhello

方式一:
库的安装! 也就是将对应的头文件和库文件拷贝到系统路径下!
方式二:
导入环境变量的方式, 程序运行的时候,会在环境变量中查找自己需要的动态库路径–LD_LIBRARY_PATH。

关键点:我们要想使用动态库,一定要让进程找到对应的静态库,因为程序和动态库是分开加载的,属于运行时找库!

3.2:动态库的封装

  • shared:表示生成共享库格式。
  • fPIC产生位置无关码
  • 库名规则:libxxx.so

示例:
在这里插入图片描述

在这里插入图片描述

相关文章:

  • [ITIL]-ITIL4的服务管理关键概念
  • 第15届台州学院校赛题解
  • Vue3树形控件实现跳转页面
  • C++-字符串处理函数-查找-截取-分割-替换-删除-格式化-与数值互转-拼接-正则表达式-常用功能
  • LeetCode 790. 多米诺和托米诺平铺
  • Qt基础之四:Qt信号与槽机制原理及优缺点
  • 机器学习笔记 十七:基于Gini Importance、Permutation Importance、Boruta的随机森林模型重要性评估的比较
  • 大数据ClickHouse进阶(二十七):ClickHouse服务监控
  • 02 【nodejs开发环境安装】
  • 【Designing ML Systems】第 2 章 :机器学习系统设计简介
  • C++与C语言中的字符串
  • 8. 无线体内纳米网:基于蓝牙LE接口的数字ID系统
  • 极智AI | 昇腾 CANN ATC 模型转换
  • 富文本编辑器(添加列表)
  • 格理论与密码学-2-2-公钥密码体制和哈希函数
  • Vue框架的学习(Vue操作指令学习三 V-bind )第三课
  • C语言之指针(中)
  • neo4j-jdbc-driver这个坑货
  • 云存储系统架构及优势
  • Oracle SQL执行计划操作(1)——表相关操作