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

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

本文基于

链表组件化封装

字符串组件化封装

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

组件化打包—动态链接库


一、静态库

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

包含多个目标文件(.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更新,所有使用它的应用程序都需要重新编译,用户也要重新下载程序文件

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

组件化打包—动态链接库

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天喜Studio

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值