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

动态库和静态库

一、动态库

1、特点

  •     动态库文件以.so作为后缀的   
  • 动态库只有在程序运行的时候才会去连接动态库的代码
  • 动态库是由多个程序共享使用的库代码,因此也叫共享库
  • 使用动态库的程序每次都要根据加载的起始位置计算内部函数以及变量地址 因此加载和运行速率不如静态库
  • 相对静态库解约内存和磁盘空间,减少页面交换

2、生成动态库

  动态库的命名规则:libxxx.so

g++ -fPIC -c add.cpp
g++ -shared -o libadd.so add.o
//-fPIC:产生位置无关码
//-shared:生成共享库

用makefile实现生成动态库

dy-lib=libmycounter.so.PHONY:all
all:$(dy-lib)$(dy-lib):counter.og++ -shared -o $@ $^
counter.o:counter.cppg++ -fPIC -c $^.PHONY:clean
clean:rm -rf *.o *.so

3、使用动态库

当我们经过上诉操作可以得等到动态库libmycounter.so,之后我们要通过编译器编译形成可执行文件,具体步骤如下

  • -I:告诉编译器,包含的头文件在哪里
  • -L:告诉编译器,包含的动态库在哪个文件夹下
  • -l:告诉编译器,包含的动态库是该文件夹下的哪一个
g++ test.cpp -I counter.h -L . -lmycounter

 

生成一个a.out的文件 

此次运行可执行文件发现还是不行,这是因为我们只是把动态库和头文件高数了编译器,但是加载器还是不知道文件在哪里,因此我们也应该把动态库的位置告诉加载器

解决找不到动态库问题的方法:

方法一、讲动态库拷贝到/usr/lib/

sudo cp libcounter.so /usr/lib/

方法二、添加到环境变量LD_LIBRARY_PHAT

export LD_LIBRARY_PHAT=$LD_LIBRARY_PHAT:/home/qyf/test.cpp/test.cpp-05-17
//冒号后面填写动态库的路径即可,无需输入动态库

方法三、建立软连接到lib里

sudo ln -s /home/qyf/test.cpp/test.cpp-05-17/libmycounter.so /lib/libmycounter.so
//路径为绝对路径一直写到动态库,进行软连接到lib里面

 

二、静态库

1、特点

  • 静态库是一组预编译的目标文件的集合,其中包含了函数和数据
  • 静态库都是以.a为结尾
  • 编译链接时静态库被复制到可执行文件中
  • 连接到程序中,程序运行时讲不会被改变,静态库代码完全替代了可执行文件
  • 会增加可执行文件的大小,但不需要外部依赖

2、生成静态库

生成静态库文件

g++ -c print.cpp print.o
//生成.o的文件
ar -rc libmyprint.a print.o
//生成静态库文件

 在makefile中生成

static-lib=libmyprint.a
$(static-lib):print.oar -rc $@ $^
print.o:print.cppg++ -c $^

3、使用静态库 

g++ test.cpp -L. -lmyprint
//L表示静态库所在的路径
//l表示指定的静态库
  • -L:告诉编译器,包含的动态库在哪个文件夹下
  • -l:告诉编译器,包含的动态库是该文件夹下的哪一个

 生成一个a.out的文件 

直接运行该文件即可

http://www.xdnf.cn/news/7913.html

相关文章:

  • NHANES最新指标推荐:α-Klotho
  • BUUCTF——Web1
  • 第十节第四部分:常见API:秒杀案例、Calendar
  • 学习黑客了解5分钟了解中间人攻击(MITM)
  • 软件的技术架构、应用架构、业务架构、数据架构、部署架构
  • Nginx核心功能深度解析与实战指南
  • Java基础 集合框架 Map接口和抽象类AbstractMap
  • Java 代码生成工具:如何快速构建项目骨架?
  • Redis队列与Pub/Sub方案全解析:原理、对比与实战性能测试
  • 基于MDX的在线文档实时编译方案
  • 工程项目进度如何做到精细化管控?
  • 项目时间紧迫的高效应对策略
  • C++日志
  • DDR中Geardown Mode理解/2N模式理解
  • 【鸿蒙开发】Hi3861学习笔记-DHT11温湿度传感器
  • Cmake 使用教程
  • 【免费分享】上百个网站整合到一个工具当中来使用,并且支持自定义添加
  • 充电桩APP的数据分析:如何用大数据优化运营?
  • 中电金信与上海华瑞银行、复旦大学金融科技研究院签署合作备忘录
  • DeepSeek 提示词大全
  • 在Settings的一级菜单中增加一个选项
  • TYUT-企业级开发教程-第9章
  • python06——组合数据类型
  • 3D Gaussian Splatting for Real-Time Radiance Field Rendering——文章方法精解
  • UML基本概念:构造块、公共机制与规则
  • 45页 @《人工智能生命体 新启点》中國龍 原创连载
  • 智能共享充电桩软件系智能共享充电桩软件系统:如何一站式定制解决方案?
  • 运维Web服务器核心知识与实战指南
  • 算法打卡第三天
  • 【算法】滑动窗口(细节探究,易错解析)5.21