标题:CPPCMS库在Windows下的使用
时间:2012-7
作者:Kagula

环境:
[1]WinXP SP3
[2]VisualStudio2008 SP1
[3]ZLib 1.2.7
[4]PCRE 8.31
[5]Python 2.7.3

第一步:配置编译环境
ZLib库
[1-1]进行VS2008命令行模式(若无特殊说明,全部命令均在这种模式下运行)
[1-2]zlib库 1.2.7下载并解压到e:\sdk
[1-3]进入到E:\SDK\zlib-1.2.7\win32目录下面,执行下面的命令,生成INSTALL.vcproj文件
cmake .. -G"Visual Studio 9 2008"
不跟参考调用cmake命令会打印出使用帮忙。
[1-4]
使用VS2008打开ALL_BUILD.vcproj文件编译出现unistd.h文件末尾错误,在文件最后加入一个回车换行再编译就可以了。
缺省编译选项是MinSizeRel(对生成的文件大小进行优化&发行版 编译模式)。
在E:\SDK\zlib-1.2.7\win32\MinSizeRel文件夹下为生成对应的lib和dll文件,还有测试用的exe文件。

PCRE库
[2-1]在下面的网址
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.31.zip
下载并解压PCRE源码包到"E:\SDK\pcre-8.31"路径下
[2-2]运行下面命令生成ALL_BUILD。vcproj文件,双击打开,并在VS2008中BUILD!
E:\SDK\pcre-8.31>cmake -G"Visual Studio 9 2008"
[2-3]如果在“MinSizeRel”下编译
会自动建立E:\SDK\pcre-8.31\MinSizeRel目录,并在这个目录里生成DLL、LIB、EXE等文件

Python
[3]在Win下安装Python2.7.3
我是装在C:\Python27路径下的,把这个路径添加到Path环境变量中

ICU(多国语言支持,可选)
[4]在下面的地址
http://download.icu-project.org/files/icu4c/49.1.2/icu4c-49_1_2-Win32-msvc10.zip
下载并解压缩到E:\SDK目录
悲剧,只支持Visual Studio 2010。

OpenSSL1.0.1(可选)
[5]如何下载编译这个库,参考网上相关文档,这里懒的写了。

第二步:编译CPPCMS
[1]
E:\SDK\pcre-8.31;E:\SDK\zlib-1.2.7

[2]进入E:\SDK\cppcms-1.0.1目录下,运行下面的命令
E:\SDK\pcre-8.31>cmake -G"Visual Studio 9 2008"
-DCMAKE_INCLUDE_PATH=E:\SDK\pcre-8.31;E:\SDK\zlib-1.2.7 
-DCMAKE_LIBRARY_PATH=E:\SDK\pcre-8.31\MinSizeRel;E:\SDK\zlib-1.2.7\win32\MinSizeRel

注意,上面是为了阅读方便才把一行内容break成三行的,实际输入命令还是在一行里。
[3]
生成ALL_BUILD.vcproj,双击打开。"MinSizeRel"方式编译(即生成最小文件的Release版本)
编译booster工程时,需要[Configuration Properties]->[C/C++]->[Preprocessor]->[Preprocessor Definitions]中添加
“PCRE_STATIC”宏,否则pcre_free函数的实现会找不到,参考资料[1]。
编译cppcms工程前,修改zlib.h文件,把原“#include "zconf.h"”代码段改为“#include "win32\zconf.h"”代码段。
然后编译Solution里全部的工程通过。

如果你修改了CPPCMS依赖库的头文件和库文件位置,则用cmake命令重新生成vcproj文件,再编译。
这样要比你一个个手动更改编译选项要方便多了。

第三步:我的第一个CPPCMS程序
[1]
在VS2008中配置以下项目
配置头文件路径
E:\SDK\cppcms-1.0.1
E:\SDK\cppcms-1.0.1\booster

配置依赖库文件路径
----------------------------------------------
Release版本的
E:\SDK\cppcms-1.0.1\MinSizeRel
----------------------------------------------
Debug版本的(默认)
E:\SDK\cppcms-1.0.1\Debug
----------------------------------------------

[2]在VS2008里新建C++的Win32 Console项目
链接库依赖项中加入“cppcms.lib”

[3]参考资料[2]中代码新建下面的代码

  1. #include <cppcms/json.h>
  2. #include <iostream>
  3. using namespace std;
  4. class response {
  5. public:
  6. //0 is ok
  7. //other values are wrong
  8. int status;
  9. string message;
  10. };
  11. namespace cppcms {
  12. namespace json {
  13. template<>
  14. struct traits<response> {
  15. static void set(value &v, response const& in) {
  16. v.set("status", in.status);
  17. v.set("message", in.message);
  18. }
  19. };
  20. }
  21. }
  22. int main(int argc, char** argv) {
  23. response r1;
  24. r1.status=0;
  25. r1.message="ok";
  26. cout<< cppcms::json::value(r1)<<endl;
  27. response r2;
  28. r2.status=1;
  29. r2.message="failed";
  30. cout<< cppcms::json::value(r2)<<endl;
  31. return 0;
  32. }

[4]
把下面路径中的文件复制到当前项目路径中
----------------------------------------------
MiniSizeRel版本的
E:\SDK\cppcms-1.0.1\booster\MinSizeRel\booster.dll
E:\SDK\zlib-1.2.7\win32\MinSizeRel\zlib.dll
E:\SDK\cppcms-1.0.1\MinSizeRel\cppcms.dll
----------------------------------------------
Debug版本的(默认)
E:\SDK\zlib-1.2.7\win32\Debug\zlibd.dll
E:\SDK\cppcms-1.0.1\booster\Debug\boost.dll
E:\SDK\cppcms-1.0.1\Debug\cppcms.dll
----------------------------------------------

[5]参考资料[2]的代码建立项目并在Release下可以正常运行。
但是在Debug模式下,虽然能编译,但不能正常运行。
一般我们为了调试方便,会在DEBUG方式下运行程序,所以你还必须编译出各个第三方库的DEBUG版本。

[6]默认情况下cppcms第三方库进行Debug同Release版本之间的切换不方便
[6-1]修改booster库的Debug编译选项
[Configuration Properties]->[Linker]->[General]->[Output File]->[原booster.dll改为boosterd.dll]
[Configuration Properties]->[Linker]->[Advanced]->[Import Library]->[原booster.lib改为boosterd.lib]

[6-2]修改cppcms项目的Debug编译选项
[Configuration Properties]->[Linker]->[Input]->[Additional Dependencies]->[原booster.lib改为boosterd.lib]
[原E:\SDK\zlib-1.2.7\win32\MinSizeRel\zlib.lib改为E:\SDK\zlib-1.2.7\win32\Debug\zlibd.lib]
[原E:\SDK\pcre-8.31\MinSizeRel\pcre.lib改为E:\SDK\pcre-8.31\MinSizeRel\pcred.lib]
[Configuration Properties]->[Linker]->[General]->[Output File]->[cppcmsd.dll]
[Configuration Properties]->[Linker]->[Advanced]->[Import Library]->[cppcmsd.lib]
----------------------------------------------------------------------------------------
这样就可以把DEBUG方式的LIB路径加入到VS2008中,而不会和原来的路径冲突。
把DEBUG方式的DLL文件复制到当前项目文件夹也不会把Release方式的DLL覆盖,方便了开发。
----------------------------------------------------------------------------------------
后来发现,Debug版本的DLL要放到上一级(Solution级别)的Debug目录中才能被EXE(Debug模式)找到,
但是Release版本的DLL文件只要放到当前项目.vcproj文件所在的目录就可以了,不纠结了... ..。
现在Debug模式设置依赖库为cppcmsd.lib就可以正常跑参考资料[2]中的代码。

[7]参考cppcms项目自带的json例子,进行深入学习。

参考资料
[1]PCRE_free找不到的问题
http://forums.codeblocks.org/index.php?topic=9577.0
[2]《C++序列化和反序列化》
http://www.cnblogs.com/fengye-dream/archive/2012/03/21/2409964.html
[3]《cppcms官网》
http://cppcms.com/wikipp/en/page/main

CPPCMS库在Windows下的使用的更多相关文章

  1. < python音频库:Windows下pydub安装配置、过程出现的问题及常用API >

    < python音频库:Windows下pydub安装配置.过程出现的问题及常用API > 背景 刚从B站上看过倒放挑战之后也想体验下,心血来潮一个晚上完成了基本的实现.其中倒放与播放部分 ...

  2. boost库在windows下的编译和使用

    因为跨平台的原因,现在要使用到boost库,boost库非常大,现在处于摸索阶段. 首先来说boost库在window下的安装和使用. 一.下载 首先从boost官方主页http://www.boos ...

  3. C语言静态库与动态库(Windows下测试)

    转载于:https://zhidao.baidu.com/question/1946953913764139388.html,原文为Linux上测试,本文为在Windows上编译测试 我们通常把一些公 ...

  4. php 图像处理库ImageMagick windows下的安装

    http://blog.sina.com.cn/s/blog_966e43000101bgqj.html

  5. windows下的c语言和linux 下的c语言以及C标准库和系统API

    1.引出我们的问题? 标准c库都是一样的!大家想必都在windows下做过文件编程,在linux下也是一样的函数名,参数都一样.当时就有了疑问,因为我们非常清楚 其本质是不可能一样的,源于这是俩个操作 ...

  6. [爬虫]Windows下如何安装python第三方库lxml

    lxml是个非常有用的python库,它可以灵活高效地解析xml与BeautifulSoup.requests结合,是编写爬虫的标准姿势. 但是,当lxml遇上Windows,简直是个巨坑.掉在安装陷 ...

  7. WINDOWS下如何安装GCC(转载http://nirvana.cublog.cn;作者:北斗星君(黄庠魁))

    第一章 在视窗操作系统下的GCC 第一节 GCC家族概览 GCC 是一个原本用于 Unix-like 系统下编程的编译器.不过,现在 GCC 也有了许多 Win32 下的移植版本.所以,也许对于许多 ...

  8. C++和C在linux下 和在windows下有什么区别?

    一.函数库的区别 linux下的C函数库和windows下的函数库系统调用的机制不一样,Glibc包含了主要的C库.这个库提供了基本例程,用于分配内存.搜索目录.打开关闭文件.读写文件.字串处理.模式 ...

  9. windows下python3.6安装pycryto or crypto or pycryptodome与使用

    pycrypto,pycrytodome和crypto是一个东西,在很久以前,crypto在python上面的名字是pycrypto它是一个第三方库,但是已经停止更新三年了,所以不建议安装这个库: w ...

随机推荐

  1. 实验2 C++数组与指针

    一.实验目的: 掌握一维数组和二维数组的定义.赋值和输入输出的方法. 掌握字符数组和字符串函数的使用. 通过实验进一步掌握指针的概念,会定义和使用指针变量. 能正确使用数组的指针和指向数组的指针变量. ...

  2. (转)Arcgis for javascript实现百度地图ABCD marker的效果

    概述: 在我的博客中,有一篇相关的文章,这段时间,有很多人问我求源码,只是时间过去已长,源代码已找不到,乘着这个9.3放假,又重新实现了下,并相关代码做了优化,在此贴出来,方便大家使用. 相关文章地址 ...

  3. 计组_IEEE754_练习题

    IEEE754   阶码:移码:尾数:原码 一个规格化的32位浮点数x的真值可表示为:          x=(-1)^s×(1. M) × 2^(E-127)       e=E-127 其中尾数域 ...

  4. mvc EF 出现异常, 能提示出那个字段出现问题

    } catch (DbEntityValidationException ex) { message = "添加异常"; desc = " {" + ex.Me ...

  5. ubuntu 更改终端颜色

    1.$ sudo gedit .bashrc 2.PS1="\[\033[1;36;01m\]\u\[\033[00m\]\[\033[1;34;01m\]@\[\033[00m\]\[\0 ...

  6. 一个ROS的服务,使机器人向前移动指定距离

    源代码有点长,放文末链接里了. 服务描述及代码现在的服务是:请求时携带要前进的距离,然后底盘前进相应距离.代码如下,改动很小: #!/usr/bin/env python import rospyfr ...

  7. Windows下Unity安装

    安装教程: https://www.paws3d.com/lesson/us-0101/ 问题1: 安装并完成注册后,在网页上能登录,但打开Unity时不能启动成功,一直停留在如下界面 解决方案:断网 ...

  8. 洛谷——P1122 最大子树和

    P1122 最大子树和 树形DP,$f[u]$表示以u为根的子树的最大美丽指数 $f[u]+=max(0,f[v])$ 树形DP的基本结构,先搜再DP,这题感觉有点儿贪心的性质,选就要选美丽值> ...

  9. Centos下安装mysql(二进制版)

    1.下载安装包,选择相应的平台.版本,比如,选择64位Linux平台下的MySQL二进制包“Linux-Generic (glibc 2.5)(x86,64-bit),Compressed” 如:#w ...

  10. 小白神器 - 一篇博客学会HTML

    小白神器 - 一篇博客学会HTML 一. 简介 1. HTML 定义 htyper text markup language  即超文本标记语言. 超文本: 就是指页面内可以包含图片.链接,甚至音乐. ...