1.静态链接库
1.1新建空项目
空项目中添加源文件Project1.cpp,头文件Project1.h,具体内容如下:
Project1.cpp
#pragma once
#include "Project1.h"
#include <iostream>
using namespace std;
void my_test_print()
{
cout << "nb" << endl;
}
Project1.h
#pragma once
void my_test_print();
1.2设置项目生成静态链接库
1.3生成静态库
平台设为X64,点击生成,成功生成静态库
可以在Project1\x64\Debug目录下找到生成的静态库文件Project1.lib
1.4新建test空项目
在test项目目录中新建include文件夹和lib文件夹,分别放Project1.h和Project1.lib,如下图所示
1.5 test添加test.cpp
添加的内容如下:
#pragma once
#include <iostream>
#include "./include/Project1.h"//也可自己添加包含目录
int main()
{
my_test_print();
return 0;
}
1.6设置库目录,链接器
我使用的是相对路径,也可选用绝对路径
库目录设置如下:
链接器设置如下:
设置完点击确定
1.7运行test项目
平台依然设为X64,点击运行,出现nb,运行成功
至此,静态链接库封装结束
2动态链接库
为了方便,我直接在静态链接库的基础上进行更改
2.1删除静态链接库
删除测试项目lib目录下的Project1.lib
2.2修改Project1.h文件
这一步挺重要的,修改为如下:
#pragma once
void __declspec(dllexport) my_test_print();
关键就是要在函数名添加__declspec(dllexport),如果不加就不能生成Project1.lib符号文件
2.3设置项目生成动态链接库
2.4生成
为避免之前生成的静态库文件的影响,删除后再点击生成
点击生成
生成后可以在Project1\x64\Debug目录下找到生成的符号文件Project1.lib和动态库文件Project1.dll
可以看到符号文件很小只有2k,主要函数的实现封装在了dll文件中
2.5复制
将符号文件Project1.lib复制到测试项目下的lib文件夹
如下图:
将库文件Project1.dll复制到测试项目下可执行文件的文件夹test\x64\Debug中
如下图:
2.6运行test项目
点击运行,出现nb,运行成功
至此,动态链接库封装结束