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

动静态库的制作

本质上来说库是⼀种可执行代码的⼆进制形式,可以被操作系统载入内存执行。

可分为两种:

静态库:.a(linux)、.lib(windows)
动态库:.so(Linux)、.dll(windows)

静态库

静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中,程序运行的时候将不再
需要静态库
编译时默认使用的是动态库,因为使用静态库会导致文件的体积变大。

只有在库中找不到动态库.so时才会使用默认使用静态库

静态库生成

这里是Makefile中的脚本程序库名为"my_pow",但是要加上前缀lib以及静态库后缀.a

我们在my_pow.c中已经实现了相关方法,通过gcc -c生成对应的.o文件,即可通过

'ar' 制作静态库

-r replace

-c create

制作完成后我们可以使用ar -tv查看库相关信息

-t  列出静态库中的文件

-v 详细信息

静态库的使用

前面我们说过,我们制作的静态库的库文件名为libmy_pow.a

前缀说明是个库文件,后缀说明是静态库(动态库.so,静态库.a)

在使用时我们需要去掉前后缀,实际上的库为my_pow

-l(小写的L)                指定库文件名(去掉前后缀

-I(大写的i)                指定头文件路径

-L                              指定库文件路径

因为是静态库,所以即使我们在制作好可执行程序后删除掉静态库也是没问题的,因为静态库已经被写在程序里了

动态库

动态库的名字与静态库类似,只不过后缀从.a改成了.so

从.c文件到.o文件时也与上面有点区别,-fPIC为生成“与位置无关码”,生成.o文件时加上即可

最后再用.o文件通过加上-shared指定生成的是动态库即可

此时我们可以看到,动态库已经顺利生成了

不过光是这样还不够,我们还需要指定动态库搜索路径

一是选择将动态库加入系统默认的搜索路径中,例如/usr/lib、/usr/local/lib、/lib64等

二是在环境变量中指定增加动态库搜索路径

像这里我们就增加了在环境变量中增加创建动态库搜索路径让我们的动态库能够被找到

如果我们要增加搜索路径,我们可以这么写

':'作为分隔符,说明我们要创建多个搜索路径,后面的$LD_LIBRARY_PATH则是将原来的内容放在里面,所以此时该环境变量的实际值则为

LD_LIBRARY_PATH=/home/lyl:/home/lyl/test

我们就有以':'为分隔符,增加了两个动态库搜索路径

相关文章:

  • MYSQL备份恢复知识:第六章:恢复原理
  • 排查Oracle文件打开数过多
  • 万字详解RTR RTSP SDP RTCP
  • 内网穿透系列五:自建SSH隧道实现内网穿透与端口转发,Docker快速部署
  • es6 函数解构
  • 不打架的协议互通,modbus转profibus网关的总线的高效互通方案
  • 通用大数据可视化展示平台模板 – 免费HTML源码
  • 解锁 AI 开发新境界:OPE Pod 开放平台深度解析
  • 云服务器系统盘满了,但是其他正常,是否可能是被攻击了
  • BSS / OSS 是什么
  • 软件测试环境搭建及测试过程
  • 软件测试的潜力与挑战:从“质量守门员”到“工程效能催化剂”的进化
  • [Vue组件]半环进度显示器
  • 三十一、面向对象底层逻辑-SpringMVC九大组件之RequestToViewNameTranslator接口设计哲学
  • pycharm找不到高版本conda问题
  • window 显示驱动开发-处理 E_INVALIDARG 返回值
  • Vert.x学习笔记-什么是Context
  • Django数据库连接报错 django.db.utils.NotSupportedError: MySQL 8 or later is required
  • 系统思考:心智模式与业务创新
  • 增程与插混技术战略
  • 英德住房和城乡建设局网站/网络促销策略
  • 做网站应该会什么问题/全国各城市疫情高峰感染进度
  • 网站做优化效果怎么样/百度推广代理商
  • asp.net 网站开发教程/百度投诉中心电话24个小时
  • 网站建设有没有做的必要/盘古百度推广靠谱吗
  • 购物网站开发实例/百度文库个人登录入口