开源项目推荐:POCO C++ Libraries大全,含MFC的编译及使用

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: 开源项目推荐:POCO C++ Libraries大全,含MFC的编译及使用

The POCO C++ Libraries are powerful cross-platform C++ libraries for building network- and internet-based applications that run on desktop, server, mobile, IoT, and embedded systems.



1、官网


https://pocoproject.org/index.html


https://pocoproject.org/releases/


https://github.com/pocoproject/poco



2、教程


https://blog.csdn.net/walk_and_think/article/details/82432863 VS2013安装


https://blog.csdn.net/arau_sh/column/info/poco-cpp-lib


https://blog.csdn.net/m1109048058/article/details/79624709 MFC中引入POCO库之后找不到API的问题


在MFC项目中加入POCO库,导致MFC中的部分方法找不到。

比如:


error C3861: “GetObject”: 找不到标识符


error C3861: “CreateFile”: 找不到标识符


解决办法:


在\Foundation\include\Poco\UnWindows.h文件中的注释部分已经说明。

方法1、使用对应方法的Unicode变体(e.g., GetUserNameW)和ASCII变体(GetUserNameA)

方法2、使用POCO_NO_UNWINDOWS的宏定义

VC++属性页预编译头添加变量:


_CRT_SECURE_NO_WARNINGS

POCO_NO_UNWINDOWS


推荐方法1


另外,多关注一下


\Foundation\include\Poco\Config.h,里面有C++11的开关


// without POCO_WIN32_UTF8 defined on Windows is deprecated.

//#define POCO_WIN32_UTF8

// Define to enable C++11 support

#define POCO_ENABLE_CPP11


\Foundation\include\Poco\Platform_WIN32.h



3、我的编译方式


(1)新建空项目

image.png



(2)手动添加自己需要的库


image.png



4、我使用MFC遇到的内存泄露问题:


https://bbs.csdn.net/topics/392663362


我是在MFC使用POCO库的,std:string存在内存泄露,解决方法是:

Build poco with MFC Extension DLLs projects, not the windows DLL, then it can used with VC++/MFC

参考https://github.com/pocoproject/poco/issues/2237


说白了,就是


(1)poco的项目属性页,常规,MFC的使用,选择“在共享 DLL 中使用 MFC”。


(2)poco项目属性页,链接器,输入,附加依赖库,添加Advapi32.lib


Advapi32.lib很重要,否则编译会报错:


1>正在生成代码...

1>  正在创建库 ..\lib\PocoFoundationd.lib 和对象 ..\lib\PocoFoundationd.exp

1>EventLogChannel.obj : error LNK2019: 无法解析的外部符号 __imp__DeregisterEventSource@4,该符号在函数 "public: virtual void __thiscall Poco::EventLogChannel::close(void)" (?close@EventLogChannel@Poco@@UAEXXZ) 中被引用

1>EventLogChannel.obj : error LNK2019: 无法解析的外部符号 __imp__RegisterEventSourceA@8,该符号在函数 "public: virtual void __thiscall Poco::EventLogChannel::open(void)" (?open@EventLogChannel@Poco@@UAEXXZ) 中被引用

1>EventLogChannel.obj : error LNK2019: 无法解析的外部符号 __imp__ReportEventA@36,该符号在函数 "public: virtual void __thiscall Poco::EventLogChannel::log(class Poco::Message const &)" (?log@EventLogChannel@Poco@@UAEXABVMessage@2@@Z) 中被引用

1>EventLogChannel.obj : error LNK2019: 无法解析的外部符号 __imp__RegCloseKey@4,该符号在函数 __catch$??1EventLogChannel@Poco@@MAE@XZ$0 中被引用

1>EventLogChannel.obj : error LNK2019: 无法解析的外部符号 __imp__RegCreateKeyExA@36,该符号在函数 __catch$??1EventLogChannel@Poco@@MAE@XZ$0 中被引用

1>EventLogChannel.obj : error LNK2019: 无法解析的外部符号 __imp__RegSetValueExA@24,该符号在函数 __catch$??1EventLogChannel@Poco@@MAE@XZ$0 中被引用

1>RandomStream.obj : error LNK2019: 无法解析的外部符号 __imp__CryptAcquireContextA@20,该符号在函数 "public: virtual int __thiscall Poco::RandomBuf::readFromDevice(char *,__int64)" (?readFromDevice@RandomBuf@Poco@@UAEHPAD_J@Z) 中被引用

1>RandomStream.obj : error LNK2019: 无法解析的外部符号 __imp__CryptReleaseContext@8,该符号在函数 "public: virtual int __thiscall Poco::RandomBuf::readFromDevice(char *,__int64)" (?readFromDevice@RandomBuf@Poco@@UAEHPAD_J@Z) 中被引用

1>RandomStream.obj : error LNK2019: 无法解析的外部符号 __imp__CryptGenRandom@12,该符号在函数 "public: virtual int __thiscall Poco::RandomBuf::readFromDevice(char *,__int64)" (?readFromDevice@RandomBuf@Poco@@UAEHPAD_J@Z) 中被引用

1>..\bin\PocoFoundationd.dll : fatal error LNK1120: 9 个无法解析的外部命令

1>已完成生成项目“Foundation_vs140.vcxproj”的操作 - 失败。



---


题外话:


1、介绍一个国产的C++库:ACL,跨平台,大而全


One advanced C/C++ library for Linux, Mac, FreeBSD, Solaris(x86), Windows, Android, IOS


https://github.com/acl-dev/acl


https://blog.csdn.net/zsxxsz


https://zsxxsz.iteye.com/


2、C++库大全


https://github.com/fffaraz/awesome-cpp


相关文章
|
1月前
|
自然语言处理 编译器 Linux
|
6月前
|
安全 编译器 C++
C++一分钟之-编译时计算:constexpr与模板元编程
【6月更文挑战第28天】在C++中,`constexpr`和模板元编程用于编译时计算,提升性能和类型安全。`constexpr`指示编译器在编译时计算函数或对象,而模板元编程通过模板生成类型依赖代码。常见问题包括误解constexpr函数限制和模板递归深度。解决策略包括理解规则、编写清晰代码、测试验证和适度使用。通过实战示例展示了如何使用`constexpr`计算阶乘和模板元编程计算平方。
103 13
|
5月前
|
消息中间件 Java C语言
消息队列 MQ使用问题之在使用C++客户端和GBase的ESQL进行编译时出现core dump,该怎么办
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
WK
|
1月前
|
机器学习/深度学习 人工智能 算法
那C++适合开发哪些项目
C++ 是一种功能强大、应用广泛的编程语言,适合开发多种类型的项目。它在游戏开发、操作系统、嵌入式系统、科学计算、金融、图形图像处理、数据库管理、网络通信、人工智能、虚拟现实、航空航天等领域都有广泛应用。C++ 以其高性能、内存管理和跨平台兼容性等优势,成为众多开发者的选择。
WK
86 1
|
1月前
|
自然语言处理 编译器 Linux
告别头文件,编译效率提升 42%!C++ Modules 实战解析 | 干货推荐
本文中,阿里云智能集团开发工程师李泽政以 Alinux 为操作环境,讲解模块相比传统头文件有哪些优势,并通过若干个例子,学习如何组织一个 C++ 模块工程并使用模块封装第三方库或是改造现有的项目。
|
2月前
|
存储 程序员 编译器
简述 C、C++程序编译的内存分配情况
在C和C++程序编译过程中,内存被划分为几个区域进行分配:代码区存储常量和执行指令;全局/静态变量区存放全局变量及静态变量;栈区管理函数参数、局部变量等;堆区则用于动态分配内存,由程序员控制释放,共同支撑着程序运行时的数据存储与处理需求。
160 21
|
2月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
568 3
|
2月前
|
Linux 编译器 C语言
Linux c/c++之多文档编译
这篇文章介绍了在Linux操作系统下使用gcc编译器进行C/C++多文件编译的方法和步骤。
49 0
Linux c/c++之多文档编译
|
2月前
|
算法 编译器 C++
【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
96 2
|
3月前
|
C++
【C++案例】一个项目掌握C++基础-通讯录管理系统
这篇文章通过一个通讯录管理系统的C++项目案例,详细介绍了如何使用C++实现添加、显示、删除、查找、修改和清空联系人等功能。
57 3