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

二、静态库的制作和使用

一、静态库的制作

什么是库

  • 库文件是计算机上的一类文件,可以简单的把库文件看成一种代码仓库,它提供给使用者一些可以直接拿来用的变量、函数或类。
  • 库是特殊的一种程序,编写库的程序和编写一般的程序区别不大,只是库不能单独运行。
  • 库文件有两种,静态库和动态库(共享库),区别是:静态库在程序的链接阶段被复制到了程序中;动态库在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加载到内存中供程序调用。
  • 库的好处:1.代码保密 2.方便部署和分发

静态库的制作

(1) 命名规则

  • Linux:libxxx.a
    • lib:前缀 (固定,library 的缩写:库)
    • xxx:库的名字,自己起
    • .a:后缀 (固定)

(2) 制作步骤

  • gcc 获得 .o 文件
  • 将 .o 文件打包,使用 ar 工具 (archive)
    ar rcs libxxx.a xxx.o xxx.o
    • r - 将文件插入备存文件 (replace的缩写)
    • c - 建立备存文件 (create的缩写)
    • s - 建立索引,让链接器更快找到函数 (index的缩写)

开始制作

这里先给出测试代码,非 vip 用户可以私聊我。

1.将测试代码拖入 lesson04 文件夹中。

2.树形显示当前目录的所有文件和子文件夹

tree


如果没有安装需要执行以下代码进行安装:

sudoaptinstalltree

3.使用-c指令将 add.c,div.c,mult.c,sub.c 汇编成 .o 文件 (不链接)

gcc-cadd.c div.c mult.c sub.c


这里不汇编 head.h 是因为在预处理的时候会把头文件复制到源文件内。

3.制作静态库

ar rcs libcalc.a add.o div.o mult.o sub.o

二、静态库的使用

准备静态库

将 lesson04 下的测试代码文件复制进 lesson05 文件夹:

cp-rcalc library../lesson05
  • cp
    • 是 copy 的缩写
    • 功能:复制文件/复制目录
  • -r
    • 是 recursive 的缩写,递归的
    • 功能:递归复制,遇到目录时,不光复制目录本身,连目录里所有的文件、子目录、子子目录… 全部一起复制过去。

拷贝静态库文件 libcalc.a 到当前目录的 ./lib 下:

编译使用静态库的程序

当前项目目录:

1.直接编译 main.c 文件:

gcc main.c-oapp

2.这里提示缺少头文件,是因为编译器只会在 main.c 所在目录下寻找头文件,因此需要-I指定 include 包含文件的搜索目录:

这次没有说找不到头文件了,但是 main.c 里有函数未定义,也就是说函数定义的库没有指出。

3.利用-l指定所用的库名 ( 对于静态库 libcalc 来说,库名是 calc ),利用-L指定所用库的路径:

gcc main.c-oapp-I./include-L./lib-lcalc


可以看到可执行文件 app 运行成功!

http://www.cnnetsun.cn/news/3347368.html

相关文章:

  • Unity粒子系统性能优化:移动端特效渲染开销分析与实战策略
  • 一文搞懂 SQL 五大分类:DDL, DML, DQL, DCL, TCL(语法 + 细节 + 注意事项 + 使用场景全覆盖)
  • AI大模型学习指南:小白程序员必备,收藏这份高薪技能秘籍!
  • ZenTorch与vLLM协同优化:AMD 20B模型推理性能调优指南
  • MLX框架下的Laguna-M.1-4bit部署指南:从零到生产环境
  • 轨道交通企业怎么做许可证利用率优化:多项目并行下先解决高峰冲突,还是先清理闲置占用
  • Instant-NuRec模型架构深度解析:从Depth-Anything-v3到高斯溅射解码器
  • 元初混沌数学108篇|华夏本源大道体系目录
  • Kimi-K2-Thinking-MXFP4-AttnFP8量化技术详解:MXFP4与FP8混合精度优化
  • Cursor多文件智能补全失效真相:3类隐式上下文断裂场景与4行配置修复方案
  • 终极指南:在AMD NPU上优化Qwen2.5-7B-Instruct_rai_1.7.1_npu_4K性能的10个技巧
  • 6-SOFA视觉模型Visual Model
  • 大数据毕设项目:基于 Python Django 的旅游用户画像构建与景点推荐系统的设计与实现 (源码+文档,讲解、调试运行,定制等)
  • c++秋招必刷:上百道c/c++面试八股文,含答案讲解Linux开发架构之路
  • 从源码到部署:AMD gpt-oss-20b-BF16-w4a16-asym-torchao-v0.17.0全生命周期教程
  • AMD Ryzen AI Llama-3.2-1B-Instruct模型缓存机制解析:Token_rms_norm缓存文件作用与优化
  • 如何在AMD MI350/MI355上部署gpt-oss-120b量化模型:超详细vLLM启动指南
  • Qwen2.5-Coder-7B-Instruct_rai_1.7.1_npu_4K模型量化原理:AWQ与BFP16技术详解
  • 基于深度学习的手势识别系统312(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_
  • SpringBoot + 微信小程序 环保公益服务系统设计与实现
  • 终极指南:Phi-3.5-mini-instruct_rai_1.7.1_npu_16K模型配置文件(genai_config.json)完全解读
  • 文心复制有星号 导出文档杂乱难整理?AI 导出鸭一站式搞定多格式转换难题
  • 学术/商务/新媒体文本润色全场景适配,ChatGPT改写避坑清单与效果验证SOP
  • Mistral-7B-Instruct-v0.1_rai_1.7.1_npu_4K提示词工程:提升NPU推理效率的10个技巧
  • W4A16不对称量化技术详解:为什么AMD选择这种量化方法
  • 密码与加密基础篇(3):salt 和 pepper 到底是什么?为什么 salt 可以放数据库?
  • TLA2518与PIC18F26K40构建高精度数据采集系统
  • IndexTTS2配置详解:从config.yaml到模型文件的完整配置手册
  • 别只把微信 API 当聊天接口:盘点生产环境下的 4 个硬核工程玩法
  • 计算机毕业设计之jsp社区门诊管理系统的设计与实现