【vcpkg】POCO库编译链接总结

导读

上一篇说了《boost编译链接》相关内容,这节要说的是另一个C++库POCO。
先看下github基本资料:
在这里插入图片描述在这里插入图片描述
从图中我们可以看到,poco的Star和Fork量比boost还要高出不少,虽然POCO身边的人用的不多,但是这个库绝对可以用上一用。(之前还用过一个Neptune的C++库,查了下github,只有几十人的Star,以后抛弃掉吧)。

最后再简单说下POCO的优点吧:

  • C++ 类库的集合,在概念上类似于 Java 类库或 .NET Framework
  • 专注于解决经常遇到的实际问题
  • 专注于“互联网时代”以网络为中心的应用。
  • 用高效、现代的 100% ANSI/ISO 标准 C++ 编写。
  • 基于并补充 C++ 标准库/STL
  • 跨平台,高度便携,可在从嵌入式到服务器的许多不同平台上使用。
  • 开源,在Boost Software License下获得许可。

开发环境

版本号描述
文章日期2022-5-17
操作系统Win11-21H222000.588
VS2019
工作目录J:_ALL\CODE\vcpkg
POCO1.11.2

POCO 与 Boost

关于 Boost,尽管存在一些功能重叠,但最好将 POCO 视为 Boost 的补充(而不是替代)。并排使用 Boost 和 POCO 是很常见的情况。

编译过程

这里,我们编译最新的静态库,不涉及版本问题,所以直接执行命令.\vcpkg.exe install Poco:x86-windows-static即可编译安装POCO库。

中途遇到下面错误,表示下载依赖组件失败,多尝试几次即可。
在这里插入图片描述

最后执行命令 .\vcpkg.exe list,可以查看已经安装的poco库。
在这里插入图片描述

POCO库实战

编写测试代码

这里我们直接编写下面类,用于App启动加载配置逻辑。

#pragma once
#include <vector>

#include <Poco/Util/Application.h>


class CMyApp : public Poco::Util::Application
{
public:
	void ReloadConfig(){}

protected:
	void initialize(Poco::Util::Application& self)
	{
		loadConfiguration("config/my_test_MFC.properties"); // load default configuration files, if present
		loadConfiguration("config/autoTest.properties");
		Application::initialize(self);
	}

	void uninitialize()
	{
		Application::uninitialize();
	}
};

配置依赖目录

配置过程就是将头文件目录和库目录设置到“属性页”,如下面两幅图所示。
不过需要注意一点,debug的库目录需要引入两个目录(libexpatMD.lib库文件没有debug版本的),配置如下所示:

/LIBPATH:"J:\_ALL\CODE\vcpkg\vcpkg\installed\x86-windows-static\debug\lib"     
/LIBPATH:"J:\_ALL\CODE\vcpkg\vcpkg\installed\x86-windows-static\lib"     

在这里插入图片描述
在这里插入图片描述

引入头文件和库

#ifdef _DEBUG
#define MY_COMMON_LIB_TYPE "d"
#define MY_BOOST_LIB_TYPE "-mt-gd"
#define MY_POCO_LIB_TYPE "mtd"
#else
#define MY_COMMON_LIB_TYPE ""
#define MY_BOOST_LIB_TYPE "-mt"
#define MY_POCO_LIB_TYPE "mt"
#endif

// POCO依赖库
#pragma comment(lib, "libexpatMD.lib")
#pragma comment(lib, "zlib" MY_COMMON_LIB_TYPE ".lib")
#pragma comment(lib, "pcre" MY_COMMON_LIB_TYPE ".lib")
#pragma comment(lib, "PocoFoundation" MY_POCO_LIB_TYPE ".lib")
#pragma comment(lib, "PocoUtil" MY_POCO_LIB_TYPE ".lib")
#pragma comment(lib, "PocoJSON" MY_POCO_LIB_TYPE ".lib")
#pragma comment(lib, "PocoXML" MY_POCO_LIB_TYPE ".lib")
#pragma comment(lib, "PocoCppParser" MY_POCO_LIB_TYPE ".lib")
#pragma comment(lib, "PocoZip" MY_POCO_LIB_TYPE ".lib")
#pragma comment(lib, "PocoActiveRecord" MY_POCO_LIB_TYPE ".lib")
#pragma comment(lib, "PocoData" MY_POCO_LIB_TYPE ".lib")
#pragma comment(lib, "PocoDataODBC" MY_POCO_LIB_TYPE ".lib")
#pragma comment(lib, "PocoEncodings" MY_POCO_LIB_TYPE ".lib")
#pragma comment(lib, "PocoMongoDB" MY_POCO_LIB_TYPE ".lib")
#pragma comment(lib, "PocoNet" MY_POCO_LIB_TYPE ".lib")
#pragma comment(lib, "PocoRedis" MY_POCO_LIB_TYPE ".lib")
#pragma comment(lib, "PocoSevenZip" MY_POCO_LIB_TYPE ".lib")

编译中遇到的问题

poco依赖了pcre库,需要引入该库。
#pragma comment(lib, "pcre" MY_COMMON_LIB_TYPE ".lib")
在这里插入图片描述
ps: PCRE (Perl Compatible Regular Expressions) 库是一组使用与 Perl 5 相同的语法和语义实现正则表达式模式匹配的函数。

Poco::Util::Application中会引入XML相关库,该库会使用到xml解析的库libexpatMD.lib,引入即可消除该报错:
#pragma comment(lib, "libexpatMD.lib")
在这里插入图片描述

release下,报如下错误,缺少了zlib库,引入即可:
#pragma comment(lib, "zlib" MY_COMMON_LIB_TYPE ".lib")
在这里插入图片描述

参考资料

**ps:**文章中内容仅用于技术交流,请勿用于违规违法行为。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜猫逐梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值