赞
踩
上篇文章介绍了ActiveMQ在C#中的应用,由于Apache.NMS的支持,ActiveMQ在C#中的应用显得很简单。可C++的应用实现起来就麻烦些了,因为还依赖第三方开源库的支持。今天折腾了大半天,终于成功编译ActiveMQ-CPP,趁热打铁,赶紧记录之。
首先列出要下载的东东:
1、ActiveMQ-CPP(3.1.2):http://activemq.apache.org/cms/
2、cppunit(1.12.1):http://sourceforge.net/apps/mediawiki/cppunit/index.php?title=Main_Page
3、apr(apr, apr-util, apr-iconv 这三个都要下载):http://apr.apache.org/download.cgi?Preferred=http%3A%2F%2Fapache.etoak.com
如果以上个别资源下载不了,可自己google再下载。下载后解压到本地某个文件夹下,下面说明中的.../指存放这些资源的文件夹。
下面来看看如何实现ActiveMQ-CPP的编译,分几个步骤:
1、编译cppunit
打开.../cppunit-1.12.1.tar/cppunit-1.12.1/examples文件夹,用vc6打开打开examples.dsw,会发现该工程中有多个项目,我们关注的是cppunit和cppunit_dll,一个是cppunit的静态链接库,一个是cppunit的动态链接库。设置增加工程的include路径和library路径,分别指向.../CPPUNIT-1.12.1.TAR/CPPUNIT-1.12.1/INCLUDE和/CPPUNIT-1.12.1.TAR/CPPUNIT-1.12.1/LIB。编译cppunit或cppunit_dll项目生成链接库文件。为测试文件是否正确,可编译工程中的simple项目,生成simple.exe,在命令行执行,如果出现如下执行结果,说明cppunit编程成功。
2、编译apr、apr-util、apr-iconv
用vc6打开.../apr-util-1.3.9/aprutil.dsw,vc6会提示你指定路径打开多个项目,那些项目文件分别位于.../apr-1.4.2-win32-src/apr-1.4.2和.../apr-iconv-1.2.1文件夹下。设置增加工程的include路径,分别是.../APR-1.4.2-WIN32-SRC/APR-1.4.2/INCLUDE和.../APR-ICONV-1.2.1/INCLUDE。接下来就可以编译了,只需编译libapr、libaprutil和libapriconv三个项目(他们依赖于apr、apriconv和aprutil,因此这三个项目也要先编译。编译aprutil时会生成apu.h,如果不编译aprutil,后面会遇到问题),会生成三个动态链接库和lib文件,把它们拷贝到一个文件夹下,如..../myAprLib,便于管理。
3、编译ActiveMQ-CPP library
用vs2005打开.../activemq-cpp-library-3.1.2/vs2005-build/vs2005-activemq-cpp.sln.
我们要编译vs2005-activemq项目。首先设置include路径,项目--》属性--》配置属性--》C/C++--》常规--》附加包含目录,增加如下四个路径:
.../cppunit-1.12.1.tar/cppunit-1.12.1/include
.../apr-1.4.2-win32-src/apr-1.4.2/include
.../apr-util-1.3.9/include
.../apr-iconv-1.2.1/include
现在可以开始编译了,如果第2步没有编译aprutil,编译过程中可能会遇到一个问题,编译器报错:apu.h找不到,切换到.../apr-util-1.3.9/include文件夹,发现有apu.h.in、apu.hw、apu.hnw,确实没有apu.h,打开第2步的工程编译一下aprutil即可。编译成功后会在.../activemq-cpp-library-3.1.2/vs2005-build/Debug下生成libactivemq-cppd.lib静态链接库,项目属性中设置的就是生成静态链接库,如果需要动态链接库可以修改项目属性设置。
4、测试libactivemq-cppd.lib
编译vs2005-activemq-example项目,首先设置该项目的include路径和library路径:
项目--》属性--》配置属性--》C/C++--》常规--》附加包含目录,增加如下三个路径:
.../apr-1.4.2-win32-src/apr-1.4.2/include
.../apr-util-1.3.9/include
.../apr-iconv-1.2.1/include
项目--》属性--》配置属性--》链接器--》常规--》附加库目录,增加.../myAprLib路径,并将.../myAprLib目录下的三个dll拷贝到.../activemq-cpp-library-3.1.2/vs2005-build/Debug文件夹下。编译vs2005-activemq-example,将在.../activemq-cpp-library-3.1.2/vs2005-build/Debug文件夹下生成vs2005-activemq-example.exe,执行该exe,就能看到ActiveMQ的消息发送和接收了(前提是要运行ActiveMQ服务器,见我上一篇文章:ActiveMQ在C#中的应用)。
由于libactivemq-cppd.lib是静态链接库,在vs2005-activemq-example编译时就将需要的代码编译到vs2005-activemq-example.exe中去了,执行时是不需要libactivemq-cppd.lib的,如果是动态链接库,执行时需要dll。
折腾ActiveMQ-CPP的一个原因是因为可能要写个MQ模块给客户使用,又不希望客户安装.NET FrameWork,vc2005或vc2008不选择CLR,就不需要.NET FrameWork了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。