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

波奇学Linux:动静态库

创建静态库

Makefile文件

mymath.c文件

 

mymath.h文件

编译main.c文件

gcc 编译时会把在系统目录中寻找头文件和库文件,文件不在系统目录中用参数

-I 头文件所在文件夹/ -L 库的地址文件夹 -l+除去lib和后缀。

拷贝文件到系统目录即可不用参数

库的安装类似于把头文件和库文件拷贝到系统文件中

库可以提供一个全局变量,如errno就是C语言提供的

如果系统默认动态链接,只提供静态链接,gcc只能提供静态链接。

动态库

动态库在程序运行时被加载到内存,所以产生库的方式和产生可执行程序的命令类似

同时连接动静库

可执行程序链接动态库,必须让加载器和gcc编辑器同时知道位置,方法如下

方法一:把动态库拷贝到系统目录/lib64/usr/lib64

方法二:在系统目录创建软链接指向动态库

方法三:环境变量$LD_LIBRARY_PATH系统搜索动态库路径,将路径添加到这个变量里

方法四:/etc/ld.so.conf.d建立自己的路径动态库路径配置文件,然后重新ldconfig即可。

动静态库区别

静态库相当于把代码拷贝到可执行程序中,当可执行程序链接后,删掉静态库依然可以运行。

动态库相当于程序运行时跳出来运行动态库的代码,动态库删除后,程序不能运行。

动态库在系统中加载之后,会被所有的程序共享,在内存中只会被加载一份。

动态库加载

一份动态库加载到内存中通过页表映射加载到多个进程地址空间的共享区,正文代码运行到库的时候进入共享区。

执行的代码都是在进程地址空间进行执行。

系统在运行时,一定会存在多个动态库,通过os管理起来

动态库的数据会发生写时拷贝,如全局变量。

可执行程序编译完后没有加载到自己内存中有自己的地址。程序可以分区并有地址

平坦模式0~4GB,上面的地址并不是真实的物理地址,是逻辑地址

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

相关文章:

  • 1723. 完成所有工作的最短时间
  • 初始HTTP协议
  • C++ 位运算常用操作 二进制中1的个数
  • 大数据领域的数据仓库
  • sentinel的资源数据指标是如何采集
  • 算法刷题:找到字符串中所有的字母异位词
  • 【Java EE初阶十九】网络原理(四)
  • 12.23 校招 实习 内推 面经
  • FPGA转行ISP的探索之一:行业概览
  • Linux系统之部署网页小游戏合集网站
  • 【白嫖8k买的机构vip教程】python(2):python_re模块
  • 【CSS】display:flex和display: inline-flex区别
  • rpm安装gitlab
  • 图论之dfs与bfs的练习
  • Vue练习5:图片的引入
  • SpringBoot+Kafka
  • 世界顶级名校计算机专业,都在用哪些书当教材?(文末送书)
  • 蓝桥杯刷题--python-8(2023 填空题)
  • Eclipse - Reset Perspective
  • 1.5v的电池电压低于多少v等于没电
  • LabVIEW智能监测系统
  • 代码随想录刷题第34天
  • AMD FPGA设计优化宝典笔记(5)低频全局复位与高扇出
  • 14. Qt 程序菜单实现,基于QMainWindow
  • 如何利用SpringSecurity进行认证与授权
  • 如何简单上手清华AutoGPT并搭建到本地环境
  • 【漏洞复现-通达OA】通达OA share存在前台SQL注入漏洞
  • HTML5 Canvas与JavaScript携手绘制动态星空背景
  • 如何优雅地与ChatGPT对话?
  • AI提示工程实战:从零开始利用提示工程学习应用大语言模型【文末送书-19】