因为项目中有c++的动态库,和静态库的使用,之前没怎么使用过动态库,不太了解使用的方法,这次在网上查询了一些资料把静态库和动态库的创建和使用都了解并且成功应用了。
首先写一下静态库的创建方法及使用(事例使用VS2019创建的)
首先打开vs2019新建一个c++的控制台应用程序,项目名称可以任意取我的项目名称为Firstlib,创建步骤如下图所示

luasocket 静态库 如何使用静态库_#include

luasocket 静态库 如何使用静态库_#include_02


在解决方案资源管理器中添加一个叫mylib.h的头文件,在源文件中添加mylib.c(名称可以任意起)

然后再建立自己的.h文件打开项目–>添加新项–>添加.h文件

建立自己的.h文件打开项目–>添加新项–>添加.c++文件

luasocket 静态库 如何使用静态库_#include_03


luasocket 静态库 如何使用静态库_#include_04


然后编写自己的.h文件,下面是我的.h文件

#pragma once
#include"mylib.h"
#include<iostream>
int Sub(int a, int b)
{
	return a-b;
}

.c++文件如下

#include<iostream>
int Sub(int a, int b);

然后在项目的属性中进行配置
首先右键项目–>属性–>常规–>配置类型–>右边下拉选择静态库–>应用
步骤如下图所示

luasocket 静态库 如何使用静态库_#include_05


luasocket 静态库 如何使用静态库_c++_06


配置好属性后不需要运行程序,只需要生成解决方案就行

luasocket 静态库 如何使用静态库_c++_07


点击生成解决方案后会提示生成一个.lib文件

luasocket 静态库 如何使用静态库_动态库_08


luasocket 静态库 如何使用静态库_c++_09


下面建立新的c++控制台项目进行.lib文件的使用新建一个名为TestFirstLib的项目(过程不再赘述)

1 把.h文件和.lib文件一块拷贝到新建的项目文件中(将.lib和.h文件拷贝到我们这个本项目.c同一目录下)

2 然后再在项目里面吧这两个文件添加进来(项目–>添加现有项)

luasocket 静态库 如何使用静态库_c++_10


现在就可以在新项目中来使用.lib文件了

测试代码如下

#include <iostream>
#include"mylib.h"
using namespace std;

int main()
{
    int t = Sub(10, 5);
    cout << t << endl;
    
}

测试结果

luasocket 静态库 如何使用静态库_c++_11


测试成功,说明我们已经会创建静态库,并且能够使用静态库了。

下面开始介绍动态库的创建及使用方法。

先介绍一下动态库的优点:

(1) 更加节省内存并减少页面交换;
(2) DLL文件与EXE文件独立,只要输出接口不变(即名称、参数、返回值类型和调用约定不变),更换DLL文件不会对EXE文件造成任何影响,因而极大地提高了可维护性和可扩展性;

(3) 不同编程语言编写的程序只要按照函数调用约定就可以调用同一个DLL函数;

(4)适用于大规模的软件开发,使开发过程独立、耦合度小,便于不同开发者和开发组织之间进行开发和测试。
我在写这篇博客前也查了一些建立动态库的方法,但是好多都是使用比较老的VSB版本建立的和现在的VS2019有一些不同,下面我把用VS2019建立动态库和使用动态库的方法的步骤写下来。
首先打开vs2019新建一个c++的控制台应用程序,项目名称可以任意取我的项目名称为FirstDll(创建步骤博客上文已经说过)
新建dll.h的头文件

__declspec(dllexport) int Sub(int a, int b);//声明要导出的API

新建源文件.cpp

#include"dll.h"
int Sub(int a, int b)
{
	return a - b;
}

接下来项目调整属性配置

右键项目–>属性–>常规–>配置类型–>右边下拉选择动态库–>应用

生成解决方案

生成了.lib文件和.dll文件

luasocket 静态库 如何使用静态库_动态库_12


下面新建项目进行对创建的动态库进行测试,动态库的有静态调用和动态调用先讲动态调用吧。

首先把.h、.lib和.dll文件拷贝到新建的项目文件中(将.lib和.h文件拷贝到我们这个本项目.c同一目录下)

再把.h、.lib和.dll文件加入到新建的工程中(加入步骤博客上文已经说过)

下面是测试代码

#include <iostream>
#include"dll.h"//连接库头文件
#pragma comment(lib,"FirstDll.lib")//链接库

int main()
{
    std::cout <<Sub(10,5);
   
}

测试结果如下

luasocket 静态库 如何使用静态库_c++_13


测试成功,说明我们已经会创建动态库,并且能够使用动态库了。