根据自己的这次编译经历来看ActiveMQ-cpp的编译相当麻烦
刚接触的时候一头雾水,基本不知道该怎么进行下去,网上找了不少资料,但是大部分都不符合我实际情况(网上提到的没有出现,属于自己个人的错误,为了解决这些问题,着实浪费了不少耗时间)
下面记录的是本人成功编译的整个过程。
说明:本文下面的安装步骤或者文字内容部分是百度(为了解决出现的问题),本人懒直接搬运
编译工具:vs2010 vs2013
分为以下几个步骤进行:
一、准备开发环境
Activemq-cpp需要的依赖库比较多,下面是我编译的时候需要的各种依赖库和文件(下面列出的依赖库,不一定全都需要,根据自己电脑开发环境的实际情况自行选择安装)由于本人公司网络的限制问题,部分网址链接被屏蔽,所以在下载过程中,出现了版本号引起的问题,所以下载的时候最好都选择最新的版本,或者网上确定各个版本的对应关系表。
1.expat
2.cppunit
3.apr(apr、apr-util、apr-iconv是哪个都要下载,最好是最新版本的 ,防止由于版本号不同引起的编译问题,具体错误演示不好描述,就不写了,先知道会有这个错误就行)
4.activemq-cpp
安装请百度
下载到同一目录,都解压到当前目录。重命名去掉版本号,这时候得到以下文件夹
…/expat
…/cppunit
…/apr
…/apr-iconv
…/apr-util
…/activemq-cpp-library
注:路径如果不改成这样,后面的头文件包含目录就要修改,会特别麻烦,一旦修改不全就会导致有写文件找不到打不开,所以为了防止麻烦,这是必须的
二、编译Activemq-cpp
(一)项目导入
为了编译的时候方便进行,减少不同项目之间的切换,
我把所有需要的项目库导入的activemq-cpp中统一管理
方法:打开项目activemq-cpp(activemq-cpp-librarys1010-build),依次添加现有项目
activemq-cpp-library/vs2010-build/activemq-cpp.sln.
添加完成后解决方案activemq-cpp的项目列表:
Activemq-cpp
Activemq-cpp-example
Active-cpp=integration-tests
Active-cpp-tests
Apr
Apriconv
Aprutil
Cppunit
Cppunit_dll
Expat
Expat_static
Libapr
Libapriconv
Libaprutil
(二)搭建编译环境
本人编译的版本是Debug win32,以下所有的编译都是如此,编译顺序按照下边给出的顺序进行开始
编译expat 不需要依赖,我编的时候直接过去了
编译apr,libapr,在apr/Debug 中生成两个文件libapr-1.lib、libapr-1.dl
在libD 中存放着apr-1.lib
编译apr-iconv -> libapriconv 添加依赖项libapr-1.lib以及相应的头文件路径和相应
依赖项路径,在apr-iconvDebug目录下会生成两个文件libapriconv-1.lib和libapriconv-1.dll
编译apr-until 和libaprutil 添加依赖项libapr-1.lib libapriconv-1.lib libexpat.lib(XML)
解析器以及相应的头文件路径和依赖项路径 生成两个文件libaprutil-1.lib和libapruti-1.dll
注:libexpat.lib 库以及相关头文件和包含路径没有添加,会有报错 找不到expat.h 等
一般库目录在pr-utilxmlexpatlib
编译cppunit 会生成cuppunit.lib 、cppunitd.lib 、cppunit_dll.lib、cppunit_dll.dll
环境搭建过程中只需要编译cppunit就可以了,其他的暂时用不到
到这里APR算是编译完成了,一共生成6个需要的库文件:libapr-1.lib、libapr-1.dll、
Libapriconv-1.lib 、libapriconv-1.dll 、libaprutil-1.lib 、libaprutil-1.dll
为了方便本人写了个批处理命令,把编译完成的库文件统一复制到解决方案下的lib文件夹下面
示例:copy aprDebuglibapr-1.lib lib
注:本人编译过程中不知道为什么突然会出现以下错误:
C1:fatal error C1083:无法打开源文件:“dsowin32dso.c ”:No such file or directory
为它添加包含路径,改变包含方法同样不管用,实在没有什么好的解决方法。只能重新解压添加工程的方式解决的
(三)编译Activemq-cpp并使用example
设置include路径,附加包含目录,四个路径:
…/ cppunit/include
…/apr/include
…/apr-util/include
…/apr-iconv/include
把刚才复制到lib文件夹线面的的库文件添加依赖库并且包含依赖目录。
编译成功后会在…/activemq-cpp-library/vs2010-build/Debug下生成libactivemq-cppd.lib静态链接库
项目属性中设置的就是生成静态链接库,如果需要动态链接库可以修改项目属性设置。
测试libactivemq-cppd.lib
编译vs2005-activemq-example项目,首先设置该项目的include路径和library路径
一定要添加,项目属性->配置属性->C/C+±>常规->附加包含目录,三个路径:
…/apr/include
…/apr-util/include
…/apr-iconv/include
把生成的activemq-cpp.lib 复制到lib 中 ,作为附加依赖项并且添加依赖库目录
编译vs2005-activemq-example,将在…/activemq-cpp-library/vs2010-build/Debug文件夹下生成activemq-example.exe,执行该exe,就能看到ActiveMQ的消息发送和接收了
由于libactivemq-cppd.lib是静态链接库,在activemq-example编译时就将需要的代码编译到activemq-example.exe中去了,执行时是不需要libactivemq-cppd.lib的,如果是动态链接库,执行时需要dll。
三、activeMq-CPP的使用
可以参考下面:
https://blog.csdn.net/chenxun_2010/article/details/52709277
https://www.cnblogs.com/bleachli/p/4365506.html