创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥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更新,所有使用它的应用程序都需要重新编译,用户也要重新下载程序文件
因此有一种弥补静态库缺点的——动态链接库 (…后面写动态链接库会更新)
大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。 |
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●) |