activemq-cpp-library在VS2015下的编译

从http://activemq.apache.org/cms/download.html下载最新版本的activemq-cpp,解压后,可以看到有一个vs2010-build文件夹,打开里面的activemq-cpp.sln。

阅读README.txt文档,根据提示,下载依赖库

  1. APR:http://apr.apache.org/
  2. CPPUnit:http://cppunit.sourceforge.net/cppunit-wiki/BuildingCppUnit1
  3. OpenSSL及其他:根据需要可选择不下载,但以上两个一定需要

在对activemq-cpp-library进行编译前,首先要确保依赖库的正常编译,查阅网上诸多资料,有分开逐个编译好再通过activemq-cpp-library的工程编译的,也有一次性全部一起编译的,本人尝试过一次性编译,未成功且错误较多不好判断哪个项目编译有问题,所以,本次展示的是分开编译的过程。

APR编译

APR库需要用到三个:apr、apr-iconv、apr-util,下载解压后把文件夹的版本号去掉。
由于后面两个需要依赖apr的生成,所以,首先需要编译的是apr这个项目,为了避免开太多窗口,我把所有的项目工程都加进去刚刚打开的activemq-cpp.sln中。

文件-》添加-》现有项目 选择{$your_apr_location}目录下的libapr.vcproj,libapriconv.vcproj,libaprutil.vcproj

接下来正式开始编译,本人编译的是Debug版本Win32,以下所有编译均一样。

  1. 编译apr,在apr\Debug目录下会生成两个文件libapr-1.lib和libapr-1.dll
  2. 编译apr-iconv,添加依赖项libapr-1.lib以及相应的头文件路径和依赖项路径,在apr-iconv\Debug目录下会生成两个文件libapriconv-1.lib和libapriconv-1.dll
  3. 编译apr-until,添加依赖项libapr-1.lib,libapriconv-1.lib,libexpat.lib(XML解析器)以及相应的头文件路径和依赖项路径生成libaprutil-1.lib和libapruril-1.dll

libexpat.lib这个库文件原来并没有包含进去,所以会有报错提醒,它存在于{$your_location}\apr-util\xml\expat\lib下。

至此,APR部分编译完成,一共生成六个文件:libapr-1.lib,libapr-1.dll,libapriconv-1.lib,libapriconv-1.dll,libaprutil-1.lib,libaprutil-1.dll

CPPUnit编译

添加项目{$your_location}\cppunit\src\CppUnitLibraries.dsw
至此,解决方案中会出现13个项目:

除了cppunit需要编译外,其他可以先不管

编译cppunit,会生成cppunit.lib、cppunit_dll.dll、cppunit_dll.lib、cppunitd.lib四个文件。

错误问题:
出现copy错误,要通过属性页设置目标文件名$(ProjectName)-》 $(ProjectName)d

至此activemq-cpp-library的依赖库文件已全部生成,为方便起见,把前面所有的库文件全部打包一起放到activemq-cpp-library的lib目录下统一管理。(关于这一点,也可以根据文档中所述的,通过修改依赖库文件的目录结构为统一的格式,并设置好环境变量,如下图)

activemq-cpp-library在VS2015下的编译_第1张图片

Activemq-cpp-library编译

首先需要编译的是activemq-cpp这个项目,编译前工作:把头文件目录以及附加库目录设置好,在属性-》C/C++-》调试信息格式,设置为:程序数据库 (/Zi),否则会出现错误 D8016“/ZI”和“/Gy-”命令行选项不兼容。
去掉警告
activemq-cpp-library在VS2015下的编译_第2张图片
输出文件名与目标文件名不一致,把输出文件名改成libactivemq-cppd.lib
编译成功,在目录{your_activemq-cpp-library_location}\activemq-cpp-library-3.9.3\vs2010-build\Win32\Debug下生成libactivemq-cppd.lib文件。

编译activemq-cpp-example项目,同理,添加头文件和库文件目录,生成activemq-cpp-example.exe程序,运行这个文件必须要和前面的那些lib文件放在同一级目录下,这是官网提供的一个activemq客户端实例,它实现的是生产者生成了2000个消息,消费者进行消费这2000个消息,生成topic消息,在http://localhost:8161/admin/topics.jsp可以看到。

另外,单独编译consumer和producer项目时,添加头文件和库文件目录,以及附加的依赖项(各lib文件),编译过程中可能会出现“无法解析的外部符号问题”
activemq-cpp-library在VS2015下的编译_第3张图片
缺少ws2_32.lib文件,添加该依赖项,这是由于代码中使用到了网络相关的API,该文件用于提供API接口。

你可能感兴趣的:(activemq)