天天看点

记录一次win7下Activemq-cpp编译(vs2013)

根据自己的这次编译经历来看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,以下所有的编译都是如此,编译顺序按照下边给出的顺序进行开始

  1. 编译expat 不需要依赖,我编的时候直接过去了
               
  2. 编译apr,libapr,在apr/Debug 中生成两个文件libapr-1.lib、libapr-1.dl
               
    在libD 中存放着apr-1.lib
  3. 编译apr-iconv  -> libapriconv 添加依赖项libapr-1.lib以及相应的头文件路径和相应
               
    依赖项路径,在apr-iconvDebug目录下会生成两个文件libapriconv-1.lib和libapriconv-1.dll
  4. 编译apr-until 和libaprutil 添加依赖项libapr-1.lib libapriconv-1.lib libexpat.lib(XML)
               
    解析器以及相应的头文件路径和依赖项路径 生成两个文件libaprutil-1.lib和libapruti-1.dll
    注:libexpat.lib 库以及相关头文件和包含路径没有添加,会有报错  找不到expat.h 等
               
    一般库目录在pr-utilxmlexpatlib
  5. 编译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

继续阅读