C++ | 生成静态库和动态库

一、静态库与动态库

  1. 静态库(.lib):将.cpp文件中的函数的地址和定义,以及函数之间的链接关系通通打包,生成的一个二进制文件。
  2. 动态库(.lib+.dll):.lib文件打包的只是.cpp文件中函数的地址和链接关系,函数的具体定义打包在.dll文件中。
  3. 相同点:
    二者都不包含函数的声明部分,因此调用这两种库的时候,都需要包含相应的头文件(.h);
    静态库和动态库的.lib文件,在生成可执行文件(.exe)的时候,都将被打包进.exe文件中;
  4. 不同点:
    静态库的.lib文件远大于动态库的.lib文件;
    动态库的.dll文件作为可执行文件.exe的附加文件加入到程序中,一般放在.exe的同级目录下。

二、简单静态库的生成

  1. 新建C++控制台应用程序MakeLib,设置该项目属性-配置属性-常规-配置类型为"静态库(.lib)";
  2. 删除main函数所在的文件;新建Add.cpp文件与Add.h文件,实现两个整型相加的功能。
  3. 运行项目,在与.sln同目录的Debug或者Release文件夹下会生成MakeLib.lib静态库文件。
//Add.h文件
#pragma once
int Add(int a, int b);
//Add.cpp文件
#include "Add.h"
int Add(int a, int b) 
{
	return a + b;
}

三、多个静态库的合并使用

  1. 在同一解决方案下,添加一个新的项目GetSum,用于调用上一步生成的静态库。
  2. 删除main函数所在的文件,新建GetSumAndPrint.cpp文件与GetSumAndPrint.h文件,用于调用静态库的Add方法,并打印输出和。
  3. 将上一步的Add.h文件拷贝到改项目下,修改属性:
    1. 【链接器/常规/附加库目录】:MakeLib.lib文件所在的文件夹;
    2. 【链接器/输入/附加依赖项】:添加MakeLib.lib;
    3. 【常规】:配置类型为"静态库(.lib)",点击"应用";
    4. 【库管理器/常规】:附加依赖项:添加MakeLib.lib;附加库目录:MakeLib.lib文件所在的文件夹;
  4. 运行项目,在与.sln同目录的Debug或者Release文件夹下会生成GetSum.lib静态库文件。
GetSumAndPrint.h
#pragma once
#include "Add.h"
#include <stdio.h>
void GetSumAndPrint();
//GetSumAndPrint.cpp
#include "GetSumAndPrint.h"
void GetSumAndPrint()
{
	int a = 10;
	int b = 20;
	int sum = Add(a, b);
	printf("%d\n", sum);
}

四、动态库的生成

  1. 新建C++控制台应用程序MakeDll,设置该项目属性-配置属性-常规-配置类型为"动态库(.dll)";
  2. 删除main函数所在的文件;新建export.h用来判断项目是引用dll还是导出dll;新建Add.cpp文件与Add.h文件,实现两个整型相加的功能。
  3. 修改属性:【C/C++/预处理器】预处理器定义添加宏定义EXPORT_DLL;
  4. 运行项目,在与.sln同目录的Debug或者Release文件夹下会生成MakeDll.dll、MakeDll.lib、MakeDll.pdb等文件。
  5. 注意:提供给别人动态库时,需要有export.h、Add.h、MakeDll.dll、MakeDll.lib、MakeDll.pdb文件。
//export.h
#pragma once
#ifndef EXPORT_H
#define EXPORT_H

#ifndef EXPORT_DLL
#define EXPORT_API __declspec(dllimport)
#else
#define EXPORT_API __declspec(dllexport)
#endif

#endif
//Add.h
#pragma once;
#include "export.h"
EXPORT_API int Sum(int a, int b);
//Add.cpp
#include "Add.h"
#include <stdio.h>
int Sum(int a, int b) {
	return a + b;
}

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

烫青菜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值