静态库的初步使用
- 新建 静态库 项目 Lib1
会产生 sln文件与vcproj文件,vcproj是工程文件,sln是解决方案文件
一个解决方案可以有多个工程
在头文件(Lib1.h)写函数声明,在cpp文件定义函数实现
这时候右键点击项目 ->生成, 会产生 Lib1.lib 的静态库文件 - 使用这个静态库文件
新建一个控制台项目
a)在主函数cpp文件里面 通过#include “相对路径\Lib1.h” 将函数声明引用过来
b)引用第一步生成的静态库文件
右键项目 -> 属性 ->配置属性 ->链接器->常规->附加库目录 将第一步生成的Lib1.lib文件所在的目录添加上(可以是相对路径)
右键项目 -> 属性 ->配置属性 ->链接器-> 输入->附加依赖项 填写上静态库文件的名字 Lib1.lib(这一步也可以通过代码来完成
#pragma comment(lib, "Lib1.lib")
)
这个时候就可以正常使用这个静态库提供的函数了
动态库的初步使用
- 用vs新建一个动态库项目 fouroperations,
会出现 dllmain.cpp这个文件内容如下:
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "stdafx.h"BOOL APIENTRY DllMain( HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
{switch (ul_reason_for_call){case DLL_PROCESS_ATTACH:case DLL_THREAD_ATTACH:case DLL_THREAD_DETACH:case DLL_PROCESS_DETACH:break;}return TRUE;
}
再创建要对外提供的 头文件 与 源文件
fouroperations.h
#pragma onceclass FourOperations {
public:__declspec(dllexport) FourOperations();__declspec(dllexport) ~FourOperations(); static __declspec(dllexport) double add(double a, double b);//加法static __declspec(dllexport) double sub(double a, double b);//减法static __declspec(dllexport) double mul(double a, double b);//乘法static __declspec(dllexport) double div(double a, double b);//除法__declspec(dllexport) void print();
};
fouroperations.cpp
// fouroperations.cpp : 定义 DLL 应用程序的导出函数。
//#include "stdafx.h"
#include "fouroperations.h"
#include "iostream"
using namespace std;FourOperations::FourOperations() {}FourOperations::~FourOperations() {}double FourOperations::add(double a, double b) {return a + b;
}
double FourOperations::sub(double a, double b) {return a - b;
}
double FourOperations::mul(double a, double b) {return a * b;
}
double FourOperations::div(double a, double b) {return a / b;
}
void FourOperations::print() {cout << "this is fouroperations.cpp" <<endl;
}
这时候右键项目,点击生成会生成dll文件,发布的话,就需要
头文件 fouroperations.h 与 fouroperations.lib 与 fouroperations.dll
2. 使用这个动态库文件
新建一个项目,右键项目属性->配置属性->c/c+±>常规->附加包含目录(把动态库文件的 fouroperations.h 添加进去 )
右键项目属性->配置属性->链接器->常规->附加库目录(填写fouroperations.lib 所在的路径)
右键项目属性->配置属性->链接器->输入->附加依赖项(填写fouroperations.lib )
这样就可以正常使用这个动态库文件了
另外关于 linux下,如果出现 静态库 使用了动态库, 而我们又要使用这个静态库的 情景:
参考https://www.cnblogs.com/fnlingnzb-learner/p/8119729.html
非常详细