熟悉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、编译运行,测试成功

Visual Studio封装静态链接库至新静态库,供程序调用相关推荐

  1. Linux 动态链接和静态链接简析(库名与库文件名)

    原文请见 Linux动态链接和静态链接简析 0. 库名与真正的库文件名 就拿数学库来说,他的库名是 m,他的库文件名是libm.so,很容易看出,把库文件名的头 lib 和尾.so去掉就是库名.(gc ...

  2. Linux-动态链接与静态链接对比(动态库和静态库)

    博客转载自:Linux-动态链接与静态链接对比 一.库的基础概念: 在windows平台和linux平台下都大量存在着库.本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行.由于wi ...

  3. 磕磕碰碰中用Visual Studio编译出了64位静态x264和ffmpeg

    最近因为公司项目,我不得不啃起x264和ffmpeg这两块硬骨头,用上了再不想碰的MinGW 1.首先,安装MinGW,在https://sourceforge.net/projects/mingw/ ...

  4. 静态链接之与静态库的链接

    1. 静态库 链接器读取一组可重定位目标文件,并把它们组合称为一个单一的可执行文件.可以通过将所有相关的可重定位目标文件打包成为一个单独的文件,这个文件就叫做静态库.在链接时,链接器只拷贝被程序引用的 ...

  5. 【Android NDK 开发】Visual Studio 2019 使用 CMake 开发 JNI 动态库 ( 动态库编译配置 | JNI 头文件导入 | JNI 方法命名规范 )

    文章目录 I . JNI 与 NDK 区别 II . Visual Studio 编译动态库 III. 配置 导入 jni.h 头文件 IV . IntelliJ IDEA Community Edi ...

  6. visual studio 2013和visual studio 2015下载链接 老版本VS

    visual studio 2013: https://my.visualstudio.com/Downloads?q=visual%20studio%202013&wt.mc_id=o~ms ...

  7. Visual Studio 2015年预览设置: 辅助安装程序说明

    本文介绍了第三方应用程序安装辅助安装的 Visual Studio 2015年预览时安装的说明.如果您安装了多设备开发功能,您需要使用其他第三方软件来处理这些项目.辅助安装程序允许您将部署到您的计算机 ...

  8. Visual Studio 2008/.NET Framework 3.5 WinForm窗体运用程序发布(部署)

    首先创建一个基于 Windows 的应用程序,然后创建一个安装程序,以便在安装过程中设置快捷方式和文件关联.向注册表添加项.显示自定义对话框以及检查 Internet Explorer 的版本. 创建 ...

  9. 在Windows 7 下使用Visual Studio 2010 编写自动申请管理员权限运行的程序

    自从Vista推出UAC之后,遇到程序需要执行一些高安全级别的操作的时候就需要系统管理员权限,如何让自己写的程序能够自动向系统申请管理员执行权限,也就是在程序的图标上出现一个小盾牌的图标呢,使用Vis ...

最新文章

  1. C++11中std::function的使用
  2. 通信系统之信道(一)
  3. 运营资源很少的时候,怎么运营自己的产品(完结)
  4. Bazel C++ 基础[翻译]
  5. androidpn的学习研究(六)Androidpn-server的Mina编码和解码解析过程
  6. python consul服务发现_consule服务注册和发现 安装 部署
  7. Q146:PBRT-V3,对系统进行拓展(以添加一个新的Integrator为例)
  8. 软件版本GA,RC,alpha,beta,Build 含义
  9. 科技爱好者周刊(第 149 期):新能源汽车,谁会是赢家?
  10. android xutils 教程,Android xUtils更新到3.0后的基本使用规则详解
  11. Python机器学习:基于西瓜数据集的KNN算法实现
  12. 反向代理实例一 访问一个域名 代理到另一个服务 nginx 200323
  13. python画气泡图_用python 来绘制气泡图的简单技巧
  14. php 新增 php_printer扩展,printer扩展的一些使用疑问
  15. 基于深度残差学习的图像识别 Deep Residual Learning for Image Recognition
  16. Ubuntu18.04安装微信以及打开闪退问题
  17. TCP连接建立/断开
  18. 进化算法——文化算法
  19. 咔咕(聊天工具)---免费绿色版,图片代替了文字
  20. 泰安学业水平考试计算机试卷,山东省泰安市2020年初中物理学业水平考试试题【含答案】...

热门文章

  1. 数据治理之数据标准管理
  2. 死亡金属重型混音教程视频|Feared 2013年的混音作品|混音母带处理 By JeromeAlanChan
  3. 100、网页端的人脸识别
  4. 机器学习基础-10:机器学习简史
  5. mysql u g_运行dev时出错_应用服务器.py在gcloud“ImportError:没有名为MySQLdb.\u mysql”的模块?...
  6. 单片机4x4矩阵键盘c语言,求一个单片机4X4矩阵键盘扫描程序,C语言的。
  7. 新垣结衣的孩子长啥样,用 BabyGAN 预测试试
  8. python计算气缸耗气量
  9. 科目二曲线行驶考试技巧
  10. Android开发:ListView+SQLite实现一个简单的备忘录程序(ADT插件环境)