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

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

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

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

我们先来理解几个问题:
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

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

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43727529/article/details/127824764