您的位置:首页 > 编程语言 > C语言/C++

ActiveMQ-cpp编译及可能的错误处理

2011-11-18 19:26 218 查看
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" target=_blank> 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

主要参考链接:
http://blog.csdn.net/bodybo/article/details/5648234
http://zhouruijun163.blog.163.com/blog/static/1077156201132085315838/

本文出自 “寻一丝烦恼” 博客,请务必保留此出处http://mayacong.blog.51cto.com/3724695/718458
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: