C++ POCO库(访问数据库,版本问题,本人配置失败)
官网下载源码:https://pocoproject.org/
一、POCO库简介
学习一个框架前,要先明白它的是什么,为什么,怎么用.下面这些文字,是从中文poco官网上转过来的,正如poco c++库的特点,非常清晰,代码风格更是一目了然.
poco开发库的特点,非常适合写后台处理程序,效率也是很高的.前台界面程序使用Qt框架库,非常好,两个库相辅相成,可解决项目上的大部分问题.
一 概述
-
一系列C++类库,类似Java类库,.Net框架,Apple的Cocoa;
-
侧重于互联网时代的网络应用程序
-
使用高效的,现代的标准ANSI/ISO C++,并基于STL
-
高可移值性,并可在多个平台下可用
-
开源,并使用Boost Software License发布
-
不管是否商用,都完全免费
-
DynamicAny与Any类
-
Cache框架
-
基于OpenSSL的密码系统
-
日期,时间类库
-
事件和通知框架
-
FTP客户端
-
跨平台的文件系统类库
-
HTML表单类库
-
HTTP客户端和服务端(支持SSL),C++ 服务器页面编译器
-
日志框架
-
多线程框架(线程池,活动对象,工作队列等)
-
POP3客户端类库
-
跨平台,一次编写,多平台编译和运行
-
进程管理和进程间通信类库
-
反射框架
-
基于PCRE的正则表达式
-
SMTP客户端类库
-
数据库访问类库(SQLite,MySQL, ODBC)
-
支持SSL/TLS,基于OpenSSL
-
动态类库加载
-
先进的内存和指针管理(Buffer, Pool)
-
Socket类库
-
网络数据流类库,支持Base64,HexBinary编解码,压缩等等
-
字符串格式化和其它字符串工具类库
-
TCP服务器框架(多线程)
-
文本编码和转换
-
Tuples
-
URI支持
-
支持UTF8和Unicode编码
-
UUID生成器
-
XML生成和解析器
-
Zip文件操作类库
-
Poco是一个强大的类库,并易于构建自己的应用程序
-
Poco帮助你创建跨平台的应用程序(一次编写,多平台编译和运行)
-
模块化和可扩展,可应用于嵌入式到企业级程序
-
提供全面,易懂的编程接口
-
使用C++语言,快速且高效
-
Poco崇尚简易
-
在设计,代码风格和文档上保持一致
-
Poco强调代码质量,包括可读性,综合性,一致性,编码风格和可测试性
-
Poco使得C++编程更加容易
-
高度关注代码质量,编码风格,一致性,可读性
-
高度关注测试
-
注重实用性
-
基于现有的,可靠的组件开发
-
Summer 2004: Günter Obiltschnig started development
-
February 2005: First release on SourceForge
-
(Release 0.91 under Sleepycat license)
-
May 2005: First contributions by Aleksandar Fabijanic
-
January 2006: Release 1.0
-
March 2006: Release 1.1
-
July 2006: Moved to Boost license, POCO Community Website
-
August 2006: Release 1.2
-
May 2007: Release 1.3
-
July 2010: Stable Release 1.3.7,
-
about 20 contributors, used in 100s of projects
-
Microsoft Windows
-
Linux
-
Mac OS X
-
HP-UX, Solaris, AIX*
-
Embedded Linux (uClibc, glibc)
-
iOS
-
Windows Embedded CE
-
QNX
-
创建自动化的中间件和设备
-
工业自动化和工业设备
-
流量控制系统
-
健康系统
-
测量,数据收集和测试系统
-
消费电子产品和家庭自动化产品
-
测量
-
航空交通管理系统
-
VoIP
-
票务和入口控制系统
-
包装应用程序
-
全面的,完整的C++框架,可减少开发工作,快速让产品走向市场
-
易学易使用,以及相当多的示例代码和良好的文档
-
原生的C++代码,性能优秀,低内存占用
-
平台无关,一处编写,跨平台编译和运行
-
大多数情况下,可以开发机上完成开发和调试工作
-
可以非常容易的迁移到新平台
-
基于现代的、标准的ANSI C++编写,使用C++ STL库。模块化设计,极少的外部依赖,易于编译和使用。结合传统的面向对象与现代的C++设计,代码易读,代码风格统一,以及相当全面的测试用例。
-
桌面/服务器: Windows, Linux, Mac OS X, Solaris, HP-UX, AIX
-
嵌入式系统: Windows Embedded CE, Embedded Linux (uClibc or glibc), iOS, QNX, VxWorks, Android
-
最低系统要求: 75 MHz ARM9, 8 MB RAM (Embedded Linux).
-
Boost Software License 1.0
-
支持Any 和 DynamicAny 的动态类型
-
提供缓存框架
-
日期和时间
-
事件与通知框架
-
(libPoco.com翻译,转载请注明)
-
基于PCRE的正则表达式
-
动态库加载
-
完美的指针和内存管理 (buffer, pool)
-
字符串格式化和工具
-
tuples
-
基于zlib的压缩/解压类
-
创建和解压ZIP文件
-
支持多种hash算法
-
支持X509数字证书
-
对称的和 RSA算法
-
支持streams加解密
-
基于OpenSSL
-
不同的数据库提供了统一的访问接口(SQLite, MySQL, ODBC)
-
自动数据类型匹配
-
支持集合类 (std::vector, std::set, std::map, etc.)
-
支持记录集和tuples
-
支持连接池
-
跨平台的文件路径操作
-
目录列表
-
通配符支持
-
文件属性管理
-
可扩展的日志框架,可拔插的日志通道和消息格式化
-
日志可输出到终端,日志文件,syslog,远程syslog,Windows事件服务
-
线程和线程同步类库
-
线程池
-
工作队列
-
活动对象
-
任务管理
-
定时器
-
流,数据报,多播,服务器和原生socket.
-
TCP服务器框架(多线程)
-
反射服务器框架
-
HTTP(S)客户和服务器框架
-
HTTP认证
-
CSP(C++ Server Page)编译器
-
FTP客户端
-
SMTP和POP3客户端
-
(libPoco.com翻译,转载请注明)
-
支持URI, UUID
-
HTML表单处理
-
MIME支持
-
基于 OpenSSL支持SSL/TLS
-
WebSocket (RFC 6455) 客户和服务器
-
进程启停
-
进程间同步
-
共享内存
-
Base64 和 HexBinary 编解码
-
压缩(zlib)
-
行结束符车换
-
内存stream
-
文本编码转换
-
URI流读取
-
支持UTF-8 和 Unicode
-
文本编码和转换
-
字符分类
-
支持命令行和服务器程序框架
-
命令行参数解析器
-
配置文件解析
-
支持Unix和Windows后台服务
-
基于 Expat 的XML解析
-
SAX2 (Simple API for XML, version 2) 解析器
-
DOM (Document Object Model, Level 1-3) 解析器
-
XML生成器
二、POCO和Boost库的对比分析
POCO的优点:
1) 比boost更好的线程库,特别是一个活动的方法的实现,并且还可设置线程的优先级。
2) 比 boost:asio更全面的网络库。但是boost:asio也是一个非常好的网络库。
3) 包含了一些Boost所不包含的功能,像XML,数据库接口等。
4) 跟Boost相比,集成度更高,是更加统一的一个库。
5) Poco的c++代码更清洁,现代和易理解。对不是模板编程专家的人来说,POCO的代码比大多数Boost库容易理解得多
6) 可以在许多平台上使用
POCO的缺点:
1) 文档有限。但这一定程度上是因为代码的容易理解。
2) 跟Boost相比用户社群小得多。
3) 有多少能集成进C++标准是个问题。而Boost在这方面不是个问题。
Boost的特点:
Boost是高质量的库,但它不是个框架。
Boost:asio处理高并发的效率还可以。单连接吞吐稍微弱点。如果选用,最好封装好,别让boost代码吞噬你的代码,那样最后不可收拾。
asio在windows下效率是最好的。基本接近自己在iocp上开发的效率。
在linux下,他默认选用epoll, 但中间为了做了层stream cache, 效率稍有损失。而且他的epoll规则用的不太合理, 可以自己修改他的代码,达到自己的需求。
在freebsd下,他默认是select的,要自己修改他的代码条件编译,才可以支持kqueue
三、使用
1、下载的源码文件为poco-develop,经cmake生成vs源码自定义名称为poco。
默认的Poco安装时会检查MySql的安装路径。如果没有检测到,则默认不会安装。cmake时如果找不到本机mysql的安装路径,需要手动配置,否则cmake后的项目不会生成PocoSQLMySQLd.lib。
两个方法
方法1、修改poco-develop\cmake\FindMySQL.cmake,增加红色部分绝对路径
方法2、cmake时手动选择路径,更快捷
2、poco源码经过debug、release编译后(快捷键F7)生成bin、lib文件夹。本人解决方案poco编译时仅项目SQLMySQL报错:
原因是mysql的mysqlclient.lib版本是低于vs2017的版本生成的,现在用vs2017编译,不匹配(此问题待解决,哪位大侠知道解决方法烦请告知,感激不尽!)。
3、头文件位于poco-develop对应的文件夹下,需要手动整合。
4、项目/属性/(C/C++)/常规/附加包含目录 中添加include文件夹。
项目/属性/链接器/常规/附加库目录 加入lib库文件夹。debug和release加入各自对应的文件夹,。