Poco入门介绍
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Poco入门介绍
1.Poco库简介
官方网站: /index.html
POCO C++库是开源的用于简化和加速C++开发面向网络、可移植应用程序的C++库集,POCO库和C++标准库可以很好的集成并填补了C++标准库缺乏的功能空隙。
POCO库的模块化、高效的设计及实现使得POCO特别适合嵌入式开发。
核心库是: Foundation, XML, Util 和 Net. 附加库中其中2个是NetSSL和Data,NetSSL 为Net库中的网络类提供SSL支持, Data库提供访问不同SQL数据库的一致性接口
支持的平台:
Microsoft Windows
Linux
Mac OS X
HP-UX,Solaris,AIX*
Embedded Linux(UcLibc,glibc)
iOS
Winodows Embedded CE
QNX
2.常用功能点
> Any and DynamicAny classes
> Cache framework
> Cryptography (cryptographic hashes, encryption based on OpenSSL)
> Date and Time classes
> Events (signal/slot mechanism) and notifications framework
> FTP client for transferring files
> Filesystem classes for platform-independent path manipulation,directory listing and globing > HTML form handling
> HTTP server and client (also secure), C++ Server Page Compiler
> Logging framework
> Multithreading: basic threads and synchronization and advanced facilities (thread pool, active objects, work queues, etc.)
> POP3 client for receiving mail
> Platform Abstraction: write once, compile and run on multiple platforms
> Processes and IPC
> Reactor framework
> Regular expressions (based on PCRE)
> SMTP client for sending mail
> SQL database access (SQLite, MySQL, ODBC)
> SSL/TLS support based on OpenSSL
> Shared library and class loading
>Smart pointers and memory management (buffer, pool)
> Sockets and raw sockets
> Stream classes for Base64 and HexBinary encoding/decoding, compression (zlib), line ending conversion, reading/writing to
memory, etc
> String formatting and string utilities
> TCP server framework (multithreaded)
> Text encodings and conversions
> Tuples
> URI handling
> UTF-8 and Unicode support
> UUID handling and generation
> XML parsing (SAX2 and DOM) and XML generation
> Zip file manipulation
2.编译安装
2.1 windows下的编译安装
2.1.1 Visual Studio 2008 下的编译安装---省略演示
2.1.2 Eclipse 下的编译安装
---演示为主
1.安装MinGW+msys cygwin
2.安装eclipse
3.设置eclipse编译工具链
2.2 unix/linux平台下的编译安装
主要步骤如下:
1.
2.
3.HelloWorld 开发自己的第一个应用
3.1构建自己的工程
a.创建工程目录hellWorld
b.创建目录include src 目录
helloWorld
/include
/src
Makefile
c. 创建hellWorl
d.cpp文件
3.2编写Makefile
警告:
Objects,target,target_version,target_libs变量最末尾一定不能有空格,否则编译会出现异常
3.3 编译
Gmake shared_release
3.4 运行
3.5 调试
4.核心模块介绍
4.1.跨平台编译包
编译脚本目录$POCO_BASE/build
常见的修改:
POCO_BASE 定义poco代码目录
OSARCH_64BITS =1 定义64位编译模式SRCDIR = src makefile与.cpp的位置
INCDIR = include .h文件夹
LIBDIR = lib lib文件夹
BINDIR = bin bin文件夹
OBJDIR = obj/$(OSNAME)/$(OSARCH)
DEPDIR = .dep/$(OSNAME)/$(OSARCH)
LIBPATH = $(POCO_BUILD)/$(LIBDIR)
BINPATH = $(POCO_BUILD)/$(COMPONENT)/$(BINDIR) -->建议改为$(BINDIR)
OBJPATH = $(POCO_BUILD)/$(COMPONENT)/$(OBJDIR)-->可以不用管)$(OBJDIR)
DEPPATH = $(POCO_BUILD)/$(COMPONENT)/$(DEPDIR)-->依赖文件目录)$(DEPDIR)
系统自带的编译指令:
all: $(DEFAULT_TARGET)
all_static: static_debug static_release
all_shared: shared_debug shared_release
all_debug: static_debug shared_debug
all_release: static_release shared_release
自定义编译指令:
CFLAGS += -g
CXXFLAGS += -g
POCO_FLAGS +=
COMMONFLAGS = -DPOCO_BUILD_HOST=$(HOSTNAME) $(POCO_FLAGS)
添加额外的头文件路径:
POCO_ADD_INCLUDE += $(ORACLE_HOME)/precomp/public $(ORACLE_HOME)/rdbms/public $(ORACLE_HOME)/rdbms/demo
POCO_ADD_LIBRARY +=$(ORACLE_HOME)/$(OraLib)
添加额外的链接库非POCO编译出来的库
SYSLIBS +=-locci -lclntsh
编译方式:
gmake shared_release
gmake shared_debug
gmake static_release
gmake static_debug
gmake all_release
gmake all_debug
gmake all
4.2.Foundation库
4.2.1 core 模块
a.Platform abstraction
1.统一了各个平台的数据类型比如long ,int ,long long 等,参考types.h
2.平台的big-endian和little-endian 参考ByteOrder.h
3.平台类型相关信息platform.h
b. Memory Management
1.智能指针(smart pointer)和共享指针(shared pointer) 参考AutoPtr.h,SharedPtr.h
2.据以引用计数器的垃圾回收机制AtomicCounter.h,refCountedObject.h
3.单件类(singleton objects) SingletonHolder.h
c.String Utilities
字符串的比较(大小写转换,大小写无关转换,去除空白符号,字符转换和连接,分拆),
参考String.h,StringTokenizer.h
d.Error Handling
1. 断言类,类似assert,主要使用宏断言,比如poco_asert(myPtr);参考Bugcheck.h
2.异常类, 了解Poco::exception结构,使用POCO_DECLARE_EXCEPTION宏,参考Exception.h
4.2.2.streams
pass
4.2.3.Threading
pass
4.2.4.DateTime
a.Timestamp 微秒级精度,对gettimeofday()封装,参考Timestamp.h
b.Stopwatch 计时器,参考Stopwatch.h
c.DateTime 日历时间,参考DateTime.h
d.日历时间的格式转换DateTimeFormat,DateTimeFormatter,DateTimeParser 等
e.日历时区Timezone
f.本地时间LocalDateTime
4.2.5 FileSystem
与平台无关的文件,目录的操作类。
a.File类,读取文件的相关信息,比如权限,大小,日期,文件的删除,拷贝等
b.Path 类,文件目录的解析,目录创建等
c.DirectoryIterator类,遍历指定目录下的文件列表
d.TemporaryFile 类,临时文件创建,删除等
4.2.6 Logging
可以输出到多个目的地(console,log files,Unix Syslog,Windows Event Log,remote logging)
主要是定义日志文件格式
logging.loggers.root.channel.class = ConsoleChannel
= global
logging.loggers.app.channel.class =SplitterChannel
logging.loggers.app.channel.channels=c1,logfile
#日志global.testApp
=global.testApp
#logging.loggers.mylogger.channel=file2
logging.filename=${logging.dir}\\${}.log
#定义日志格式
logging.formatters.formatter1.class = PatternFormatter
logging.formatters.formatter1.times=local
logging.formatters.formatter1.pattern =
[%y/%m/%d %H:%M:%S][${application.month}][%q]-%t
#定义日志输出地,输出地名称输出的格式
logging.channels.c1.class = ConsoleChannel
logging.channels.c1.formatter =formatter1
logging.channels.logfile.class=FileChannel
logging.channels.logfile.times=local
logging.channels.logfile.formatter=formatter1
logging.channels.logfile.path=${system.env.HOME}/Download/${application.n ame}_${application.month}.log
#rotation
logging.channels.logfile.rotation=daily
#file2
logging.channels.file2.class=FileChannel
logging.channels.file2.times=local
#archive number|timestamp
logging.channels.file2.archive=number
logging.channels.file2.class=FileChannel
logging.channels.file2.formatter=formatter1
logging.channels.file2.path=${}_${application.month}_a.log logging.channels.file2.rotation=daily
press=true
#purge purgeAge|purgeCount
logging.loggers.root.level = debug
logging.loggers.root.channel.class = SplitterChannel
///以channel开头的属性
logging.loggers.root.channel.channel1 = consoleChannel
logging.loggers.root.channel.channel2 = fileChannel
也可以配置成
logging.loggers.root.channel.channels=consoleChannel,fileChannel
///定义控制台通道
logging.channels.consoleChannel.class = ConsoleChannel
logging.channels.consoleChannel.formatter = f1
///定义文件通道
logging.channels.fileChannel.class = FileChannel
logging.channels.fileChannel.path = mantid.log
logging.channels.fileChannel.formatter.class = PatternFormatter\n" logging.channels.fileChannel.formatter.pattern
= %Y-%m-%d %H:%M:%S,%i [%I] %p %s - %t
///定义消息格式
logging.formatters.f1.class = PatternFormatter
logging.formatters.f1.pattern = %s-[%p] %t
4.2.7 Processes
4.2.8 Shared Libraries
4.2.9 Notifications
4.2.10 Event
4.2.11 Crypt
4.2.12 Text
4.2.13 Regular Expressions
4.3.XML库
Xml解析器是对expat解析库的包装。
4.4.5 FTP
21
4.4.6 Mail
4.4.7 HTML
4.5.Util库
主要是配置文件(ini,xml,properties)解析类,命令行参数解析类,以及构建命令行工具的框架类
4.5.1 Configuration files
提供了一个访问各类配置文件格式的接口,可以支持Java-style的property文件,windows 风格的.ini文件以及XML文件
4.5.2 Command Line Options
处理与平台无关的命令行参数.例如在unix平台上参数都是以-或者—开头的,在windows平
.callback(OptionCallback<SampleApp>(this, &SampleApp::handleHelp)));
options.addOption(
Option("define", "D", "define a configuration property")
.required(false)
.repeatable(true)
.argument("name=value")
.callback(OptionCallback<SampleApp>(this, &SampleApp::handleDefine)));
options.addOption(
Option("config-file", "f", "load configuration data from a file")
.required(false)
.repeatable(true)
.argument("file")
.callback(OptionCallback<SampleApp>(this, &SampleApp::handleConfig))); --设置回调函数
options.addOption(
Option("bind", "b", "bind option value to test.property")
.required(false)
.repeatable(false)
.argument("value")
.binding("application.month")); --- 相当于设置application.month=value中的值,那么在其他的地方就可以引用application.month
选项有如下属性:
full name : 长名字
short name 短名字
description:描述信息
optional|required 可选或者必选
repeatable:是否可以重复选择
1也选项可以成为一个选项组的一部分
选项可以绑定到配置属性中,这样配置属性就可以自动接受参数值
回调函数处理当选择被指定那么就处理该回调函数
选项验证信息
23
4.5.3 Tools and Server Applications
基于命令行工具和服务应用程序的框架。
服务应用在Unix平台上实现为daemon,在windows平台上运行为服务
5.开发规范。