熟悉Windows开发的人都肯定了解静态链接库和动态链接库。
最近遇到一个问题:
A静态库是使用VS编译,因为C++版本的问题,并不能直接在Qt中被调用,因为会报头文件某处错误。
因为A库很大,同时又不想修改太多A库源文件,所以想到了继续封装A库为B静态链接库,然后可以在Qt中调用B库。
所以,此文便是如何封装静态库,和如何使用静态库调用静态库。
1、先创建静态库文件 MathLibAdd
其中头文件和源文件代码分别如下:
#pragma once
class MathLibAdd
{
public:
static void Add(int a, int b);
};
#include "MathLibAdd.h"
#include <iostream>
void MathLibAdd::Add(int a, int b)
{
std::cout << "this is MathLibAdd-> Add" << std::endl;
std::cout << a + b << std::endl;
}
将静态库编译:
因为采用的是Debug模式编译,所以在Debug目录中文件如下:
2、编写静态库 MathLib
同样的方法创建静态库MathLib
2-1 添加MathLibAdd静态库及配制:
将上一步编译生成的MathLibAdd.lib、MathLibAdd.h文件复制至特定目录
然后在当前创建的静态库文件下右键点击项目名->属性, 配制静态库依赖。
在对应的编译模式下,配制VC++目录中的 包含目录、库目录信息,分别添加MathLibAdd库文件的头文件、lib文件目录地址信息。
然后编写MathLib库头文件及源代码:
MathLib.h
#pragma once
class MathLib
{
public:
static void Add(int a, int b);
};
Mathlib.cpp
#include "MathLib.h"
#include <iostream>
#include "MathLibAdd.h"
void MathLib::Add(int a, int b){
std::cout << "this is MathLib -> Add" << std::endl;
MathLibAdd::Add(a, b);
}
编译MathLib项目,生成文件如下:
3、写测试程序,测试MathLib静态库
3-1、新建MathLibTest项目
3-2、将上述两部编译生成的MathLibAdd.lib、MathLib.lib两个静态库文件,及MathLib.h头文件复制至特定目录
3-3、配制MathLibTest项目库文件信息
3-3-1、项目属性打开
3-3-1-1、VC++目录配制
3-3-1-2、链接器配制
打开链接器配制->输入
在右侧添加依赖项中将MathLib.lib、MathLibAdd.lib的库名添加进去。
3-4、编写测试源代码
// MathLibTest.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include "MathLib.h"
int main()
{
std::cout << "Hello World!\n";
MathLib::Add(10, 20);
}
// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单
// 入门使用技巧:
// 1. 使用解决方案资源管理器窗口添加/管理文件
// 2. 使用团队资源管理器窗口连接到源代码管理
// 3. 使用输出窗口查看生成输出和其他消息
// 4. 使用错误列表窗口查看错误
// 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
// 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件
4、编译运行,测试成功