POCO C++ Libraries大全,含MFC的编译及使用(★firecat推荐★)

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)新建空项目

POCO C++ Libraries大全,含MFC的编译及使用(★firecat推荐★)_第1张图片

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

POCO C++ Libraries大全,含MFC的编译及使用(★firecat推荐★)_第2张图片

 

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

 

你可能感兴趣的:(C/C++)