库文件
库是已经写好的、成熟的、可复用的代码
windows下静态库配置
- 创建静态库
- 编写头文件和.c文件
//头文件
#pragma once
int myAdd(int a, int b);
//.c文件
#include"mylib.h"
int myAdd(int a, int b) {
return a + b;
}
- 项目名右键->配置属性->常规->配置类型修改为:静态库
- 生成项目(ctrl+b)
- 使用静态库
- 将生产的(项目名.lib)文件和头文件复制到需要使用静态库的项目下
- 项目名右键->添加->现有项:添加lib和头文件
- 在新文件中可以直接使用库文件的函数
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include"mylib.h"//自定义库文件
int main(void)
{
printf("%d\n",myAdd(10, 20));
return 0;
}
windows下动态库配置
- 创建动态库
- 编写头文件(头文件的函数需要声明为导出函数)和.c文件
//头文件
#ifndef __MYDLL_H__
#define __MYDLL_H__
//该种表示为内部函数,只能供包含该函数的文件使用
//int mySub(int a, int b);
//动态库的函数需要声明为外部函数(导出函数),才能供其他文件使用
//生成.lib和.dll:.lib只包含变量声明和导出函数的声明,.dll包含实现(静态库的.lib包含所有声明和实现)
__declspec(dllexport) int mySub(int a, int b);
#endif
- 项目名右键->配置属性->常规->配置类型修改为:动态库
- 生成项目(ctrl+b)
- 使用动态库
- 将生产的(项目名.lib,项目名.dll)文件和头文件复制到需要使用静态库的项目下
- 项目名右键->添加->现有项:添加lib和头文件(使用
pragma comment(lib,"./mydll.lib")
时可以不添加现有项) - 在新文件中可以直接使用库文件的函数
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//可以使用以下方式替代添加动态库现有项
#pragma comment(lib,"./mydll.lib")
#include"mydll.h"
int main(void)
{
printf("%d", mySub(20, 10));
return 0;
}
动态库和静态库的区别
1.静态库直接编译链接到了exe文件中,删除静态库不影响exe文件运行;更新静态库后需要重新编译exe文件
2.动态库是在运行时进行链接,删除动态库后exe文件不能正常执行,降低了exe文件的大小