2021-11-12

C++静态库与动态库创建(易操作)

一. 静态库与动态库的区别:

1、 静态库在工程编译的过程中会直接整合到目标程序中,优点在于编译成功的可执行文件可以独立运行,不再需要向外部要求读取函数库的内容。如果函数库更新,需要重新编译。
2、 动态库,动态函数库在编译时,在程序中只有一个“指向”的位置,也就是说编译时,动态库中的函数不会编译到可执行文件中,当可执行文件在执行过程中需要函数库中的函数时,根据编译时遗留的“指向”,找到对应的函数。使用动态库得到的可执行文件不能独立运行。但是对于产品系统更新,只需要重新编译动态库即可。

二. 静态库与动态库的创建

3、 创建静态库lib:
①、使用VS创建空项目
编写头文件以及对应的源文件
②、生成lib文件:
右键项目->属性->配置属性->常规->配置类型->静态库(.lib)
③、生成解决方案:
debug、release
4、创建动态库dll
①、使用VS创建空项目
编写头文件以及对应的源文件,在源文件中添加句柄
头文件:

#ifdef DLLAPI
#ifdef DLLEXPORT_API                    //类似于if else结构,用于确定                                         
#define JCHEXPORT __declspec(dllexport) //句柄宏的输入、输出属性
#else
#define JCHIMPORT __declspec(dllimport)
#endif
#else
#define JCHEXPORT
#endif // DLLAPI


#include <iostream>
double JCHEXPORT add1(double a, double b);
double JCHEXPORT multi1(double a, double b);

class JCHEXPORT SIFTDetection
	{
	public:
		SIFTDetection() {}                             //默认构造函数
		SIFTDetection(Mat &img) {                    //带参数构造函数
			imgSrc = img.clone();
		} 
	}

对应的cpp文件中添加,或者在属性页的预编译器的指令中添加这两个宏定义

#define DLLAPI
#define DLLEXPORT_API


double add1(double a, double b)
{
	return a + b;
}
double multi1(double a, double b)
{
	return a + b;
}

②、生成dll和lib文件:
右键项目->属性->配置属性->常规->配置类型->动态库(.dll)
③、生成解决方案:
debug、release

三. NOTE:

①更改输出文件的名称
右键项目->属性->配置属性->常规中配置如下图所示:配置常规属性
到此便可以完成动态库以及静态库的创建
②创建动态库与静态库;可以直接在开始新建项目时,就直接创建动态库或静态库项目。也可以在常规属性中将配置类型更改为动态库(.dll)
③生成的动态库或静态库文件,其中.dll文件的名称不能随意更改、只能通过note①中的方法重新编译名称,但是生成的.lib的文件名称可以随意更改。
④在头文件中,如果有函数的实现,无论有无输出的宏定义,在主函数中都可以使用,因为#include的意思就是把所有的文件直接粘贴到主函数中。若只有函数的声明,而没有函数的实现,只有通过输出宏定义,才能够被主程序中使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值