Poco:第二步,一个简单的程序
上一篇:http://hi.baidu.com/%B3%BF%B3%D8/blog/item/59839a438d372b1573f05dfd.html
一晃两年多过去了,第二步才开始,道个歉!
先要做的是修正一下第一步里面一点错误,首先,最新的poco已经支持对express的Visual Studio 2008/2010了,这是一个好消息,这意味着在windows上面我们就有免费工具使用poco了。
其次要做的,是一点补充,关于编译方面。需要说一下的是,用build_vs71.cmd(或者其他什么build_vs*.cmd)编译,其本质仍然是用Visual C++编译,只不过改成了命令行执行而已。以 build_vs71.cmd为例,打开以后,里面只有一行是buildwin …,然后,我们打开buildwin.cmd,在里面就很复杂的一大票东西——就是windows批处理脚本,但是只要注意一个变量%BUILD_TOOL%就可以了,在文件第一行定义的就有:
devenv就是Visual C++执行命令行编译的命令。在整个文件前面很多if判断就是检查需要执行什么类型的编译(debug/release…),然后就开始用BUILD_TOOL进行编译。
对于使用vcproj项目文件来编译poco就是一个Visual C++工程文件进行编译,但是它的几个选项,可能需要解释一下:debug_shared/release_shared,这个没什么说的,就是调试或者发布版本,使用的poco库是动态链接库;static_mt/static_md,这个的区别就有点费解,其中前面的debug/release_static很清楚,后面的mt/md区别在于对C/C++ runtime库的链接方式,mt表示用静态方式链接C/C++ runtime库,md表示用动态方式链接C/C++ runtime库,比如,debug_static_mt的意思是调试版本,使用静态poco库,链接C/C++ runtime库使用静态方式,其他亦然。
更多关于C/C++ runtime库的知识:
关于C/C++ runtime库编译选项设置的详细而权威的官方介绍:http://msdn.microsoft.com/en-us/library/abx4dbyh(v=VS.71).aspx
为什么和怎么选择正确的C/C++ runtime库:http://www.davidlenihan.com/2008/01/choosing_the_correct_cc_runtim.html
好了,这些东西知道就可以了,刚刚入门的时候就用debug_shared模式就可以了,等用的多了,再认真区别。
在程序当中使用poco库
以VS2003.net的Windows Console工程为例,创建起来以后,需要修改下面这些配置,才可以开始在程序里面使用poco库的函数或者类:
1、菜单Project - Properties,打开项目的Properties Pages窗体,在Configuration Properties - C/C++ - Code Generation当中的Runtime Library选项修改成为Muti-threaded DLL (MD)。这个选项默认的是单线程的,只要改成任意一个多线程选项就可以了,不做修改是无法编译通过的。
2、菜单Project - Properties,打开项目的Properties Pages窗体,在Configuration Properties - C/C++ - General当中的Additional Include Directories当中,填写上poco的include文件夹。比如你的poco放在了c:\poco目录下面,那么你需要写上c:\poco\poco-1.4.0\Foundation\include。这个选项是设置引用的库对应头文件所在位置,编译器会把这个目录放在寻找头文件的目录候选当中。
3、菜单Project - Properties,打开项目的Properties Pages窗体,在Configuration Properties - Linker - General当中的Additonal Library Directories当中,填写上poco的lib文件夹,如上条的例子,你应该写c:\poco\poco-1.4.0\lib。这个选项设置了库文件所在目录。
4、菜单Project - Properties,打开项目的Properties Pages窗体,在Configuration Properties - Linker - Input当中的Additional Input Files当中,填写上你要调用的poco库文件。在这里我们要调用一个字符串处理函数,它在库PocoFoundation.lib当中,所以就填这个就可以了。
5、把PocoFoundation.lib对应的dll文件复制到项目文件夹,它在poco的bin目录下面,名字就是PocoFoundation.dll。这是因为我们编译用的是debug shared模式,可执行代码里面并没有poco的二进制码,在需要调用poco函数的时候,它就会按照一定的候选目录顺序去对应的dll里面找,项目文件夹是第一个候选目录,所以我们把对应的dll放在这里。
当然,做这一切的前提是:你已经成功的编译了poco的debug shared版本。
下面,把这些代码输入到main.cpp(你的工程里应该只有这一个文件)当中:
在这个程序里面,我们调用了一个poco的函数trim,它的功能就是把字符串两端的空格去除掉,然后我们输出去除以前和以后的字符串看看效果。编译通过以后,执行程序,就完成了(应该很顺利,如果你按照上述步骤还遇到问题了,请跟帖)。对于poco当中的单个函数,也可以采用类似的方式进行调用。
一点解释:
1、Poco/String.h是包含了trim的头文件,关于函数trim的更多详细说明,或者更多类似trim函数的说明,请参考poco的文档:http://pocoproject.org/docs/
2、如果你下载了poco的官方文档,里面也有关于trim的例子,也很简单,但是有一点区别就是官方文档的代码没有#include
3、Poco::trim::trim函数就在头文件Poco/String.h当中,是用模板定义的。本来只要引用了头文件就可以用,不需要一二三四五的设置一大堆,但是由于间接引用了其他头文件(Poco/Foundation.h),不得不如此。有点可惜,如果能做到只引用头文件就可以使用函数就好了,杀鸡杀牛一样方便灵活,但是现在的做法是杀鸡不得不用牛刀。
4、在前面第二条设置头文件路径的时候,必须设置到include,不能是inlcude/Poco;相同原因,我们引用的时候,必须是Poco/String.h,而不能是String.h。因为在poco内部的头文件互相引用的时候就是基于目录include而不是include/Poco的。
5、注意大小写不要搞错,即使是include里面也不能错,因为并不是所有的操作系统都不区分大小写字母的。如果大小写混淆了,会牺牲poco的可移植性(这本来就是poco的一个很大的优点)。
到这里,我们已经可以在工程当中使用一个简单的poco函数,虽然例子是VS2003.net的Console工程,但是对于其他版本的vs下的其他工程,也是类似的配置方法。下一步,我会介绍一下poco的各个功能和优点,解释一下为什么要用poco。
[原文在百度空间已经关闭]
标签集合/Tag clouds
C++
Symbain
轻松汇编
算法
论文学习
资治通鉴
Delphi
编程之美
Poco
MFC
Linux
IFC
知乎
汇编
数据分析
交叉编译
poco
j2me
android
XML
Java
DTD
飞信
零宽断言
诺基亚
联系人
编程
真值表
池西木
正则表达式
多线程
命令行
优化
stream
configure
cmake
VIM
UiAutomator
TDD
Symbian
Sqlite
SourceInsight
Python
MPAndroidChart
Kotlin
Flutter
Dokka
Chatgpt