ActiveMQ-cpp的编译相当麻烦,网上也可以找到不少指定资料,可照着做有错误不知道怎么办,后来重要找到了一篇处理的错误的文章,自己也编译成功,主要的两篇参照文章会在文章最后给出。下面整理下,希望后来人不用再浪费时间

需要下载的东西(版本最新的就行):
1、ActiveMQ-CPP: http://activemq.apache.org/cms/
2、cppunit: 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
 
下载到同一目录{dir},逐个解压到当前目录,然后重命名去掉目录名字的版本号,最后是下面4个文件夹:
{dir}\cppunit
{dir}\apr\
{dir}\apr-iconv\
{dir}\apr-util\
如果路径不这样,后面会需要修改头文件包含目录,比较麻烦...
 
1、编译cppunit
用vc6打开打开examples.dsw,指编译cppunit和cppunit_dll
 
2、编译libapr、libapriconv、libaprutil
用vc6打开{dir}\apr-util\aprutil.dsw,会提示让你指定路径去打开多个项目,如果上述路径正确,需要指定的就比较少,但不管多与少那些项目一定在:
{dir}\apr
{dir}\apr\build
{dir}\apr-iconv
{dir}\apr-iconv\build
全部打开后,我们需要的依次编译下面的工程:
//  如果出现错误请看下面第4节编译错误的处理  
apr
apriconv
aprutil
libapr
libapriconv
libaprutil
 
补充(2013-02-27):前三个为静态库,后三个为动态库,不论需要哪种,把这六个的debug和release版本都编译出来,不然可能缺少自动生成的头文件,编译完成后,在apr、apr-iconv、apr-util的目录下会有这样几个目录:
Debug(debug动态库)
Release(release动态库)
LibD(debug静态库)
LibR(release静态库)
 
3、编译ActiveMQ-CPP
 
补充(2013-02-27):建议使用apr、apr-iconv、apr-util的动态库,原因下面会讲。
补充(2013-02-27):建议编译时,debug版的activemq使用debug版的apr动态库,release版的activemq使用release版的动态库,所以后文的lib目录应该分为debugDLL和releaseDLL两个目录,用来编译两个版本的activemq。
 
将1、2编译出来的文件拷贝到{dir}\lib(方便管理):
cppunit.lib
cppunit_dll.lib
libapr-1.lib
libapriconv-1.lib
libaprutil-1.lib
 
cppunit_dll.dll
libapr-1.dll
libapriconv-1.dll
libaprutil-1.dll
//可能不需要这么多,我没测试,成功就行
 
最新的activemq-cpp是vc2008编译的,这里用的是vc2010,打开{dir}\activemq-cpp-library-3.4.0\vs2008-build\activemq-cpp.sln
补充(2013-02-27):无论编译还是以后使用都建议用vc2008,否则编译ReleaseDLL和使用Relase版都可能出问题。
也是有多个项目,我们只需要编译activemq-cpp就可以,编译前添加头文件搜索目录:
{dir}\cppunit\include
{dir}\arp\include
{dir}\apr-iconv\include
{dir}\apr-util\include
添加库搜索目录:
{dir}\lib
补充(2013-02-27):debug版的activemq添加{dir}\debugDLL,release添加{dir}\releaseDLL
 
编译activemq-cpp,会生成静态库:libactivemq-cppd.lib
可以选择编译成动态库,不过编译没通过,暂时还不知道原因
补充(2013-02-27):不建议用静态库,非常大,200多M和500多M,使用时每次编译程序都比较慢,而且在我测试时,就算使用静态库,还是需要apr的动态库libapr(很奇怪,应该是我哪里错了),没办法做到完全没有DLL。实际使用中我编译了ReleaseDLL和DebugDLL,在自己的程序中debug使用DebugDLL,release使用ReleaseDLL。
使用中只需要下面的几个文件:
activemq-cpp.lib(debug版为activemq-cppd.lib,只需要编译这一个lib即可)
activemq-cpp.dll(debug版为activemq-cpp.dll)
libapr-1.dll
libapriconv-1.dll
libaprutil-1.dll
 
编译完成后可以编译此方案中的activemq-cpp-example,测试下activemq-cpp,记得要加入头文件目录、库目录,如果运行时没有找到DLL,还需要把依赖的DLL复制到运行目录
 
4、第2节编译错误处理
可能出现的错误及处理:
 
1)没有找到strings.h和inet.h 错误:
打开httpd-2.2.11\srclib\apr\include\apr_want.h 文件,把以下行注释掉:
#if APR_HAVE_STRINGS_H
#include <strings.h>
#endif
#if APR_HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
 
2)提示不支持LDAP v2.0错误:
打开httpd-2.2.11\srclib\apr-util\include\apr_ldap.h ,注释此行:
#error Support for LDAP v2.0 toolkits has been removed from apr-util. Please use an LDAP v3.0 toolkit.
 
3)未定义SQLLEN或者SQLULEN
打开文件:httpd-2.2.11\srclib\apr-util\dbd\apr_dbd_odbc.c
文件头部定义:
typedef INT32 SQLLEN
typedef unsigned int SQLULEN
//双击定位到错误,在上面定义也可以,方便
 
4)LDAP_VENDOR_NAME 错误
打开httpd-2.2.11\srclib\apr-util\ldap\apr_ldap_init.c,注释掉它:
LDAP_VENDOR_NAME
 
5)WtsApi32.h没有包含错误
表示没有安装或配置Microsoft 的PlatformSDK,需要去微软网站上下载PlatformSDK,并安装。
 
6)awk 错误
这个错误是由于没有安装awk工具导致,可以先到http://www.gnu.org/software/gawk/ 下载一个gawk进行安装。如果安装的目录为:C:\Program Files\GnuWin32,在该目录下可以看到一个bin目录,需要把该目录添加到VC Executable files。完整路径可能为:C:\Program Files\GnuWin32\bin
 
主要参考链接: