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

静态库.a与.so库文件的生成与使用

任务一.用gcc生成静态库和动态库
1.1在ubuntu系统中创建一个目录来保存程序文件并编辑三个程序hello.h,hello.c,main.c。
先通过后端代码创建目录

屏幕截图 2025-10-06 021430
然后用vim文本编辑器编辑三个程序文件
程序1 hello.h:

屏幕截图 2025-10-06 021753
程序2 hello.c:

屏幕截图 2025-10-06 022420
程序3 main.c:

屏幕截图 2025-10-06 022605
1.2将hello.c文件编译成.o文件

屏幕截图 2025-10-06 023136
1.3通过生成的.o文件生成静态库
静态库文件的命名规范是以lib为前缀,然后跟静态库名,扩展名为.a。创建静态库用ar命令。

屏幕截图 2025-10-06 023933
1.4在程序中使用静态库
在调用静态库的内部函数时,需要在使用到这些公用函数的程序中包含公用函数的原型声明,然后在用gcc命令生成目标文件时指明静态库名,gcc将会从静态库中将公用函数连接到目标文件中。下面先生成目标程序hello,然后再运行它,看是否能实现程序功能。

屏幕截图 2025-10-06 032305
成功实现了程序功能。
1.5通过生成的.o文件生成动态库
动态库文件命名规范与静态库类似,都是以lib为前缀然后跟库名,只不过它的扩展名为.so。通过在终端输入命令创建动态库

屏幕截图 2025-10-06 033243
1.6在程序中使用动态库
在程序中使用动态库的方式与静态库完全一致。下面先生成目标文件,然后再运行它,看是否能成功实现程序功能。

屏幕截图 2025-10-06 034819
通过实际操作,我发现确实可以生成目标文件hello,但是再运行它时会出现错误,无法正常运行。通过理解显示的错误原因,我发现原来是因为找不到动态库文件libmyhello.so。程序在运行时,会先在/usr/lib和/lib等目录中查找需要的动态库文件。若找到,则载入动态库,程序正常运行。若没有找到,则会出现错误,程序无法正常运行。之后我们将动态库文件libmyhello.so复制导入到/usr/lib中,发现目标文件可以正常运行。

http://www.rkmt.cn/news/16620.html

相关文章:

  • 通过利用百度对于外链的检测算法上的缺陷
  • 深入解析:预览pdf(url格式和blob格式)
  • 线性偏微分方程和非线性偏微分方程的区别
  • selenium基础 - 教程
  • 详细介绍:20250602在荣品的PRO-RK3566开发板的Android13下的uboot启动阶段配置BOOTDELAY为10s
  • 实用指南:HTML实现端午节主题网站:龙舟争渡,凭吊祭江诵君赋
  • 大数据-276 Spark MLib - 基础介绍 机器学习算法 Bagging和Boosting区别 GBDT梯度提升树 - 实践
  • 向量存储vs知识图谱:LLM记忆系统技术选型
  • card
  • 复习题集
  • Kubernetes 定时备份etcd数据
  • 17_AiAgentMCP实现技术选型
  • Photoshop启用钢笔绘制图形
  • 代码随想录打卡|Day51 图论(dijkstra(堆优化版)精讲、Bellman_ford 算法精讲) - 教程
  • 自动化数据操作平台获3000万美元融资
  • 常见排序算法详解与C语言实现 - 详解
  • AtCoder Beginner Contest 422 游记(VP)
  • 详细介绍:无人机光纤FC接口模块技术分析
  • 文件提供的基本操作
  • yarn、pnpm、npm - 指南
  • 基于Linux环境docker封装exe
  • ubuntu之开机自启frpc - 教程
  • Python趣学篇:交互式词云生成器(jieba + Tkinter + WordCloud等) - 指南
  • 10.6集训改错
  • CSP-J 第二轮集训 :总结 + 专题细分精讲_from_黄老师
  • 软件工程第一次随笔 - Nicholas
  • UV使用
  • 学生管理系统面向对象分析报告
  • 云原生架构的演进与落地:重塑企业 IT 的核心能力 - 实践
  • Kubernetes(K8s)核心架构解析与实用命令大全 - 教程