【c语言】组件化打包—静态库lib

news2024/12/23 4:50:54

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥c语言系列专栏:c语言之路重点知识整合 🔥
给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

本文基于

链表组件化封装

字符串组件化封装

在组件化封装好的基础上进行静态库打包…

组件化打包—动态链接库


目录

  • 一、静态库
  • 二、创建静态库
    • 1.创建新项目
    • 2.复制组件化文件
    • 3.添加头文件声明
    • 4.生产静态库文件lib
  • 二、使用静态库
    • 1.复制静态库到项目
    • 2.添加预编译指令
    • 3.测试
  • 静态库lib总结

一、静态库

静态库是一种包含已编译代码的集合,可以在链接时与应用程序一起链接到最终可执行文件中。

包含多个目标文件(.o/.obj),这些文件是通过编译和汇编源代码生成的。静态库被认为是静态的,因为它们在链接时被完全复制到可执行文件中,而不需要动态加载。
使用静态库可以使得应用程序更加独立,不需要运行时链接库的存在,但是会增加可执行文件的大小。

我们只能使用库里面函数的功能,但是看不到库里面函数的实现

二、创建静态库

1.创建新项目

创建一个项目名称为测试组件的空项目

在这里插入图片描述
在解决方案中新建项目——选择静态库

在这里插入图片描述
在这里插入图片描述

2.复制组件化文件

把准备好的组件化代码复制到静态库的项目文件夹

在这里插入图片描述
在vs解决方案中添加现有项目: 把刚复制进去的组件化头文件和源文件添加到解决方案中

在这里插入图片描述

3.添加头文件声明

每个源文件中添加#include “pch.h”

  • 务必放在第一行!!
  • 每个源文件都要写!!!

在这里插入图片描述
#include “pch.h” 未在第一行产生的错误:
在这里插入图片描述

4.生产静态库文件lib

在这里插入图片描述

然后就可以在项目所在文件夹——debug中看到打包好的静态库文件

在这里插入图片描述

如果产生错误:试图执行此项目。 可能是库项目不是可执行文件


同理之前的字符串和链表组件也同样添加进来

链表组件化封装

字符串组件化封装


二、使用静态库

1.复制静态库到项目

在这里插入图片描述
在这里插入图片描述

2.添加预编译指令

在这里插入图片描述

添加加载组件的预编译指令:

在这里插入图片描述

3.测试

调试执行:

在这里插入图片描述

测试示例代码:

#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include "lib/arrays.h"
#include "lib/string_pro.h"
#include "lib/collections.h"
#pragma comment(lib,"./lib/StaticArrayLib.lib")  //加载 库
#pragma comment(lib,".\\lib\\StaticStringLib.lib")
#pragma comment(lib,".\\lib\\StaticLinkLib.lib")
typedef struct score
{
	char name[30];
	int math;
	int english;
	int chinese;
}SCORE, * P_Score;
P_Score createSCORE(const char* name,int m,int e,int c   )
{
	P_Score p = (P_Score)malloc(sizeof(SCORE));
	strcpy(p->name , name);
	p->math = m;
	p->english = e;
	p->chinese = c;
	return p;
}
int cmp(void* a,void* b)
{
	P_Score pa = (P_Score)a;
	P_Score pb = (P_Score)b;
	return pb->math- pa->math   ;
}

int cmpSum(void* a, void* b)
{
	P_Score pa = (P_Score)a;
	P_Score pb = (P_Score)b;
	return (pb->math+pb->english+pb->chinese  ) - (pa->math+pa->english+pa->chinese);
}
int main()
{
	PLinkedList list = createLinkedList();	//测试组件内的函数
	add(list, createSCORE("天喜",100,89,97));
	add(list, createSCORE("张三", 88, 89, 71));
	add(list, createSCORE("紫棋", 98, 78, 69));
	add(list, createSCORE("椰子", 66, 11, 78));
	add(list, createSCORE("李四", 100, 78, 97));
	add(list, createSCORE("王五", 59, 35, 100));

	sort__(list,cmp );

	iterator(list);
	while (  hasNext(list) )
	{
		P_Score p = (P_Score)next(list);
		printf("%s %d %d %d\n",p->name,p->math,p->english,p->chinese);
	}
	sort__(list, cmpSum);

	iterator(list);
	while (hasNext(list))
	{
		P_Score p = (P_Score)next(list);
		printf("%s %d %d %d\n", p->name, p->math, p->english, p->chinese);
	}

	//回收内存
	iterator(list);
	while (hasNext(list))
	{
		P_Score p = (P_Score)next(list);
		free(p);
	}
	clear(list);
	free(list);
	list = NULL;

	/*int arr[] = {1,2,3,6,97,5,3,48,3};
	sort(arr, ARRAY_LENGTH(arr), ASC);
	for ( int i=0,len = ARRAY_LENGTH(arr); i<len; i++)
	{
		printf("%d\n",arr[i]);
	}

	char str[] = "TianXi Studio";
	toUpperCase(str);
	printf("%s\n",str);*/
	return 0;
}

静态库lib总结

静态库:

  • 移植方便

  • 文件体积大
  • 空间浪费
  • 不易更新

将组件化打包位静态库的过程:编译好的目标文件,通过编号、索引、压缩打包为静态库文件lib
在其他的项目中添加打包好的静态库文件,就可以直接使用其中的函数

但是静态库存在浪费空间的问题,并且静态库对程序的更新、部署和发布页会带来麻烦

如果静态库libxx.lib更新,所有使用它的应用程序都需要重新编译,用户也要重新下载程序文件

因此有一种弥补静态库缺点的——动态链接库

组件化打包—动态链接库

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/543933.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

项目质量体系搭建

质量意识 引入两个问题&#xff1a; 1、没有bug&#xff0c;算不算高质量&#xff1f; 2、没有bug&#xff0c;并且满足用户的需求&#xff0c;算不算高质量&#xff1f; 质量的认知 说起“质量”这个概念&#xff0c;我们都很熟悉&#xff0c;会说“坏的质量会怎样怎样&…

项目经理:靠学不靠干,绝对出不来

有人说&#xff1a;“项目经理是干出来的&#xff0c;不是学出来的&#xff1b;是带出来的&#xff0c;不是教出来的”。 我很赞同这个观点&#xff0c;要成为一名合格的项目经理不仅靠学&#xff0c;还要靠干。靠干&#xff0c;完全不学&#xff0c;可以出项目经理。但靠学不…

磁盘分析工具 WizTree

要点&#xff1a; 推荐两个应用&#xff1a;WizTree&#xff0c; SpaceSniffer.exe 参考资料&#xff1a;电脑软件&#xff1a;推荐一款磁盘空间分析工具——WizTree 1、WizTree是啥&#xff1f; WizTree 是一款Windows下磁盘空间分析工具。它可以快速扫描并分析你的电脑硬盘…

chatgpt赋能Python-python3_5__1

Python35<<1是什么&#xff1f;——深入探究Python3的位运算符 Python35<<1是一种使用Python编程语言实现的位运算操作。在计算机科学中&#xff0c;位运算符是用来对二进制数进行操作的&#xff0c;这种操作是以位为单位而不是以字节或字为单位。因此&#xff0c…

港联证券:机器人行业有望迎来整体性机会 六氟磷酸锂翻倍上涨

表示&#xff0c;当前AI调整的时间空间已接近13年水位&#xff0c;且调整的促发因素有望缓和&#xff0c;后续可积极一些。一方面&#xff0c;13年三次调整时间在40日以内、幅度在15%以内。当前AI调整已持续1个月、幅度在10%以上&#xff0c;时空已接近历史。另一方面&#xff…

JavaWeb-FilterListener的学习

Filter&Listener 1&#xff0c;Filter 1.1 Filter概述 Filter 表示过滤器&#xff0c;是 JavaWeb 三大组件(Servlet、Filter、Listener)之一。Servlet 我们之前都已经学习过了&#xff0c;Filter和Listener 我们今天都会进行学习。 过滤器可以把对资源的请求拦截下来&a…

MC6630: [ VI ] >热插拔摄像头如何处理

第一种情况, 之前是连上摄像头的, 现在拔下来: 当连着摄像头时: VI部分 通道属性的UserPic是不启用的, Irq是启用的. 拔下来后, 属性值不发生变化. 其它部分:各司其职, 正常运行 当断开时: VI部分不变: 对于VI来说, 就是没有图像源过来, 而VI通道而言: 有图像就处理,没有…

视频怎么转换成音频mp3?教你几种转换方法

视频怎么转换成音频mp3&#xff1f;MP3是一种有损压缩音频格式&#xff0c;全称为MPEG-1 Audio Layer 3。MP3格式可以在保证高质量的同时&#xff0c;采用比WAV更高效的压缩方式&#xff0c;降低文件大小。MP3格式广泛应用于数字音乐播放器、音频流媒体、网络广播等方面。虽然M…

常见的一些内网穿透工具

内网穿透的英文叫做 NAT traversal&#xff0c;又被称为端口映射或内网映射&#xff0c;内网穿透是网络连接术语&#xff0c;即在计算机是局域网内的时候&#xff0c;外网与内网的计算机的节点进行连接时所需要的连接通信&#xff0c;有时候就会出现内网穿透不支的情况。 内网穿…

全面评测安全企业邮箱加密服务,推荐高性价比提供商

安全电子邮件是加密形式的电子邮件。有权访问密钥的人只能阅读电子邮件。有许多安全的电子邮件发送工具可以避免业​​务风险并保护电子邮件中写入的信息。这些工具使您能够使用安全的端到端电子邮件加密来发送和接收消息。Zoho Mail企业邮箱最适合多用户帐户、小型企业和个人使…

从供应链协同角度挖掘数字化应用场景

企业在数字化转型的过程中&#xff0c;供应链的数字化转型是绕不开的话题。供应链的数字化转型&#xff0c;是借助数字化技术赋能企业和供应链从业人员&#xff0c;驱动业务向更加高效智能的方向发展。越来越多的企业意识到需要依靠新技术&#xff0c;也往往非常强调新技术的应…

数据结构与算法基础(青岛大学-王卓)(3)

第三弹来啦&#xff0c;第一章的顺序表和链表落下帷幕了&#xff0c;可以开开心心吃雪糕了:) beautiful分割线 文章目录 第三弹来啦&#xff0c;第一章的顺序表和链表落下帷幕了&#xff0c;可以开开心心吃雪糕了:)循环链表定义带尾指针循环链表的合并 双向链表定义双向循环链…

排版设计工具Affinity Publisher 2.04版本在win10系统上的下载与安装配置教程

目录 前言一、Affinity Publisher安装二、使用配置总结 前言 Affinity Publisher是一款由 Serif 公司开发的排版设计工具&#xff0c;旨在为用户提供完整的出版解决方案。 Affinity Publisher 工具的详细介绍&#xff1a; 1. 排版功能 Affinity Publisher 提供了各种排版功…

每日一练 | 软考网络工程师真题练习Day5

1、下面有关BGP4协议的描述中&#xff0c;不正确的选项是 。 A&#xff0e;BGP4是自治系统之间的路由协议 B&#xff0e;BGP4支持CIDR技术 C&#xff0e;BGP4把最正确通路参加路由表并通告邻居路由器 D&#xff0e;BGP4封装在TCP段中传送 2、CMP协议在网络中起到了过…

环信 uni-app-demo 升级改造计划——整体代码重构优化(二)

概述 本次关于 uni-app 代码整体重构工作&#xff0c;基于上一期针对 uni-app 官网 demo 从 vue2 迁移 vue3 框架衍生而来&#xff0c;在迁移过程中有明显感知&#xff0c;目前的项目存在的问题为&#xff0c;项目部分代码风格较为不统一&#xff0c;命名不够规范&#xff0c;注…

macOS Ventura 13.4 (22F66)发布

系统介绍 5 月 19 日黑果魏叔官网消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 13.4 更新&#xff08;内部版本号&#xff1a;22F66&#xff09;&#xff0c;本次更新距离上次发布隔了 41 天。 macOS Ventura 带来了台前调度、连续互通相机、FaceTime 通话接力等功能…

Fourier分析入门——第3章——离散函数的Fourier分析

目录 第 3 章 离散函数的Fourier分析 3.1 引言 3.2 在1点采样的函数 3.3 在2点采样的函数 3.4 Fourier分析是一种线性变换 3.5 Fourier分析是一种基向量的变更 3.6 在3点采样的函数 3.7 在D点采样的函数 3.8 整理(tidying up) 3.9 Parseval[p:zeifa:l]定理 3.10 关联…

性价比提升15%,阿里云发布第八代企业级计算实例g8a和性能增强型实例g8ae

5 月 17 日&#xff0c;2023 阿里云峰会常州站上&#xff0c;阿里云正式发布第八代企业级计算实例 g8a 以及性能增强性实例 g8ae。两款实例搭载第四代 AMD EPYC 处理器&#xff0c;标配阿里云 eRDMA 大规模加速能力&#xff0c;网络延时低至 8 微秒。其中&#xff0c;g8a 综合性…

微博服务器为什么会宕机?这几年为什么极少再宕机了?

大家有没有发现一个事情&#xff0c;相比六七年前微博动辄因为各路明星的新闻忽告宕机&#xff0c;比如最出名的微博“三大战役”&#xff1a;李晨发范冰冰分手、王宝强离婚&#xff0c;鹿晗公布恋情&#xff0c;近几年微博宕机的次数已经越来越少了。 自从各路明星大料不断让新…

TCAN114x-Q1部分组网增强型CAN FD收发器(SBC_CAN的收发器)

目录 TCAN114x-Q1部分组网增强型CAN FD收发器1、功能2、应用程序3、描述4、设备比较表5、引脚配置与功能8、规格8.1绝对最大评级 9、参数测量信息10、详细描述10.1概述10.2功能框图 10.3特性描述10.3.1 VSUP引脚10.3.2 VIO引脚10.3.3 VCC引脚10.3.4接地10.3.5 INH/LIMP引脚10.3…