当前位置: 首页 > news >正文

Visual Studio C++引入第三方库

前言

欢迎来到我的博客

个人主页:北岭敲键盘的荒漠猫-CSDN博客

 本文主要整理visual studio C++导入第三方库的注意事项与操作

bilibili配套视频:【visual studio C++导入第三方库-哔哩哔哩】 https://b23.tv/vphfXnv

运行库选项

右键项目 -> 属性 -> C/C++ ->代码生成->运行库

 

可以看到在debug模式下他有四个选项。

 

MT,MD与MTd,MDd的区别

debug模式生成的可执行文件会比较大,方便我们调试使用。

release模式文件体积小,适合作为发行版。

这里的MTd,MDd后面带了d的就是debug模式的生成。

debug模式下默认使用的是MDd,release下默认使用MD。

 

MT与MD的区别

配置类型MT(/MT、/MTd)MD(/MD、/MDd)
全称多线程静态运行时库多线程动态运行时库
运行时依赖无需额外DLL需微软运行时DLL(如msvcp140.dll
文件体积主程序较大(运行时库代码嵌入其中)主程序较小(运行时库代码在DLL中共享)
适用场景绿色单文件部署、嵌入式系统多程序共享DLL、依赖系统运行时环境

直观点:

MT就是相当于把所有代码写在一个文件里,它可以直接执行。

MD就是分文件编写程序,缺一个文件就无法执行。而这里的文件实际上是DLL文件。

 

推荐查阅内容:

Visual Studio C++ 常用配置变量表-CSDN博客

 

第三方库导入案例

导入三步走

1.导入头文件

2.添加依赖目录

3.添加依赖文件

 

Crypto++导入案例

特点:下载自带visual studio工程,依赖动态lib。

下载:https://github.com/weidai11/cryptopp/releases/tag/CRYPTOPP_8_9_0

下载下来后文件夹里很多文件

有一个sln解决方案文件。

点开里面有四个项目

我们先看一下他是什么配置

MT静态配置,release,x64,这个东西的配置要跟我们的项目一样。

我们都用默认的演示吧。

lib就是链接文件,所以我们要生成cryptlib项目。

生成完毕。

我们要用这个第三方库需要用这个。

现在创建我们的项目。

这里我创建一个lib,一个include文件夹。

lib用来存放lib文件,include用来存放文件头。

(当然这个不是必须的,可以根据自身喜好做)

现在配置解决方案选项。

这个改成OutDir,这个是文件的运行环境,OutDir就是他生成exe的文件夹,所以我们的相对路径就在exe文件所在的目录,原本是在项目目录。

包含目录配置好,存放文件头。(这里就是include文件夹的路口)

 

添加lib存放目录。

(我们调试有时候会用debug,有时候用release,所以可以两个模式一起编译,然后分开放)。

$(SolutionDir)lib\$(ProjectName)\$(Platform)\$(Configuration)

即:解决方案目录\lib\项目名称\x64\Release

我们再创建好文件夹,把之前生成的lib复制过来。

现在我们只是选择了链接目录,还需要选择链接的文件。

所以在这里填写文件。

这样基本都是配置完成了。

接下来是把文件头全部复制到include中。

这里你看,直接复制进来是不是文件太多了。

这是一个第三方库,如果很多库呢,他们有重名的怎么办,所以这时候我们创建一个文件夹。

把这个库的文件全部放到文件夹中。

然后我们导入的时候添加一个相对路径。

现在我们写个程序进行测试。

#include <iostream>
#include <cryptopp/aes.h>  // 包含AES算法头文件
#include <cryptopp/cryptlib.h>  // 核心库头文件
#include <cryptopp/modes.h>  // 包含模式操作头文件using namespace CryptoPP;int main() {try {std::cout << "Crypto++ Library Test:" << std::endl;// 验证AES算法支持std::cout << "AES Block Size: " << AES::BLOCKSIZE << " bytes" << std::endl;// 验证基础加密对象创建ECB_Mode<AES>::Encryption encryptor;  // 修复问题:确保包含 modes.h 头文件std::cout << "ECB AES Encryptor initialized successfully." << std::endl;return 0;}catch (const CryptoPP::Exception& e) {std::cerr << "Crypto++ Error: " << e.what() << std::endl;return 1;}catch (const std::exception& e) {std::cerr << "Standard Exception: " << e.what() << std::endl;return 1;}catch (...) {std::cerr << "Unknown error occurred." << std::endl;return 1;}
}

执行成功。

 

spdlog导入案例

特点:下载只有源码没有工程,纯静态不依赖lib。

库地址:https://github.com/gabime/spdlog

下载下来文件结构如下:

可以看到,他有CMakeLists.txt文件,但是没有现成的项目。

所以我们要先构建项目。

我们先构建我们Exper的项目。

好,这里我们要去构建spdlog的visual工程。

我们在他的目录创建一个build文件夹

我们在build文件夹中构建项目。

我们使用cmake工具构造项目。在build中打开cmd命令行输入这个构建

cmake .. -G "Visual Studio 17 2022" -A x64

cmake:启动cmake工具

..:在build的上一级目录启动

-G "Visual Studio 17 2022":选择2022编译器(根据你的visual版本而定)

-A x64:生成64位项目。

cmake会在你安装visual studio的C++环境的时候自动安装。

如果你发现没有的话。

这是因为新版本他不会直接把这些工具放到全局环境中。

你可以用visual studio专门开发者的cmd环境操作。

打开方法如下:

好cd到build目录执行就行了

执行完毕会出现sin项目

这种就能编译好了。

不过这种是针对相同类型的库。

但是spdlog很特殊。

  1. 零编译依赖
    spdlog是典型的头文件库(Header-only library),所有实现代码都包含在.hpp文件中,编译器在预处理阶段直接将代码嵌入到你的源文件中。

  2. 自动实例化机制
    模板类在首次使用时自动实例化(如spdlog::info创建logger对象),无需提前编译二进制文件。

所以这个库只需要你直接include个头文件就能用。

include里的文件直接放进去。

配置好

直接运行。

报错utf-8

这个框架强制要求utf-8

添加一下这个

直接运行。

代码:

#include "spdlog/spdlog.h"int main() 
{spdlog::info("Welcome to spdlog!");spdlog::error("Some error message with arg: {}", 1);spdlog::warn("Easy padding in numbers like {:08d}", 12);spdlog::critical("Support for int: {0:d};  hex: {0:x};  oct: {0:o}; bin: {0:b}", 42);spdlog::info("Support for floats {:03.2f}", 1.23456);spdlog::info("Positional args are {1} {0}..", "too", "supported");spdlog::info("{:<30}", "left aligned");spdlog::set_level(spdlog::level::debug); // Set global log level to debugspdlog::debug("This message should be displayed..");    // change log patternspdlog::set_pattern("[%H:%M:%S %z] [%n] [%^---%L---%$] [thread %t] %v");// Compile time log levels// Note that this does not change the current log level, it will only// remove (depending on SPDLOG_ACTIVE_LEVEL) the call on the release code.SPDLOG_TRACE("Some trace message with param {}", 42);SPDLOG_DEBUG("Some debug message");
}

完美

 

 

 

http://www.dtcms.com/a/138638.html

相关文章:

  • Spring HTTP Interface 入门案例介绍
  • sentinel安装部署及测试--实践
  • 在Vmware15(虚拟机免费) 中安装纯净win10详细过程
  • RK3588 实现音视频对讲
  • Oracle 12.1.0.2补丁安装全流程
  • 如何使用3DMAX插件PFSpliner将3D对象转化为艺术样条线?
  • AOP的基本应用案例---统计每个函数的执行时间
  • IntelliJ IDEA 项目导入后 Java 文件图标显示为红色小写 j 的解决方法
  • LVS+keepalived搭建高可用架构
  • 资源直方图与资源平衡技术在资源约束下的作用是什么?
  • Paramiko 使用教程
  • [特殊字符] UnionFS(联合文件系统)原理解析:容器背后的存储技术
  • css button 点击效果
  • Github 2025-04-17 Go开源项目日报 Top9
  • Go:低级编程
  • QT 初体验
  • 无源蓝牙技术与传统RFID(射频识别)对比
  • 使用DDR4控制器实现多通道数据读写(八)
  • 在极狐GitLab 身份验证中如何使用 OIDC?
  • 大数据分析02 基础语法差异
  • 【FFmpeg从入门到精通】第二章-FFmpeg工具使用基础
  • Java虚拟机(JVM)平台无关?相关?
  • BFC详解
  • uniapp上传图片时(可选微信头像、相册、拍照)
  • 基于Canal+Spring Boot+Kafka的MySQL数据变更实时监听实战指南
  • ETL数据集成平台在电商行业五大应用场景
  • 阅读分析Linux0.11 /boot/head.s
  • kotlin + spirngboot3 + spring security6 配置登录与JWT
  • Java如何在遍历集合时删除特定元素
  • 【Pandas】pandas DataFrame get