用ActiveMQ进行C++与C#的通信3 - 编译ActiveMQ-CPP

本节关于ActiveMQ的编译可参考《ActiveMQ-CPP编译》,本文编译环境为VS2012。

一、准备

1、下载最新版的ActiveMQ-CPP:http://activemq.apache.org/cms/

2、下载最新版的Apache Portable Runtime(APR),包含apr、apr-iconv、apr-util:http://apr.apache.org/download.cgi?Preferred=http%3A%2F%2Fapache.etoak.com

3、下载最新版的CppUnit:https://sourceforge.net/projects/cppunit/

二、编译

将下载好的工程解压后放在一个文件夹中,如图所示:


1、编译CppUnit

使用VS2012打开cppunit\src\CppUnitLibraries.dsw,项目升级后重新生成cppunit_dll工程,这时候会报错:

error MSB3073: 命令“copy "F:\Software\Open Source\ActiveMQ\CPP\Compile\cppunit\src\cppunit\.\DebugDll\cppunit_dll.dll" ..\..\lib\cppunit_dll.dll
error MSB3073: copy "F:\Software\Open Source\ActiveMQ\CPP\Compile\cppunit\src\cppunit\DebugDll\cppunit_dll.lib" ..\..\lib\cppunit_dll.lib
error MSB3073: :VCEnd”已退出,代码为 1。
这是项目默认后期生成事件造成的找不到文件,将其修改为:

copy "$(TargetDir)\cppunitd_dll.dll" ..\..\lib\cppunitd_dll.dll
copy "$(TargetDir)\cppunitd_dll.lib" ..\..\lib\cppunitd_dll.lib
重新生成项目,在cppunit\lib文件夹中可以找到生成的库文件:cppunitd_dll.dll和cppunitd_dll.lib。

2、编译APR(apr、apr-iconv、apr-util)

用VS2012打开apr-util\aprutil.dsw,解决方案单向升级后,分别生成libapr、libaprutil和libapriconv三个项目。

2.1 生成libapr

libapr依赖项目apr,生成apr之后,右键生成libapr,在apr\Debug文件夹中可以找到生成的libapr-1.dll、libapr-1.lib、gen_test_char.exe。

2.2 生成libapriconv

libapriconv依赖项目apriconv,生成apriconv之后,右键生成libapriconv,在apr-iconv文件夹中可以找到生成的libapriconv-1.dll、libapriconv-1.lib。

2.3 生成libaprutil

libaprutil依赖项目aprutil,生成aprutil之后,右键生成libaprutil,会出现找不到文件之类的错误:

2>c1 : fatal error C1083: 无法打开源文件:“expat\lib\xmlparse.c”: No such file or directory
这是由于缺少依赖库libexpat(https://libexpat.github.io/),下载地址:https://sourceforge.net/projects/expat/files/expat/2.2.2/。

下载libexpat并解压,将expat文件夹复制到apr-util\xml中,将expat\lib复制到apr-iconv\lib中。

再次生成libaprutil,出现错误:

7>_tbl_simple.obj : error LNK2011: 未链接预编译对象;映像可能不能运行
参考博客园文章《 链接器工具错误 LNK2011 》,修改apr-iconv\build\modules.mk.win文件:

$(SILENT)link $(ALL_LDFLAGS) $(MODRES).obj $*.obj $(API_LIBS) /out:$@ \

即在该文件的link命令中添加$(MODRES).obj项。

再次编译libaprutil,已经能够生成库文件(文件夹apr-util\Debug):libaprutil-1.dll、libaprutil-1.lib。

3、编译ActiveMQ-CPP

用VS2012打开activemq-cpp\vs2010-build\activemq-cpp.sln,升级解决方案后,添加include目录,将apr、apr-iconv、apr-util、cppunit项目的include文件夹拷贝到activemq-cpp项目的include文件夹中,再将activemq-cpp\src\main文件夹拷贝到include\activemq-cpp目录中,然后修改activemq-cpp的附加包含目录:

..\include\cppunit\include
..\include\apr-util\include
..\include\apr-iconv\include
..\include\apr\include
..\src\main
然后创建lib目录,将APR和CppUnit生成的库文件拷贝进去


修改activemq-cpp项目生成类型为动态库,设置附加库目录为..\lib,设置附加依赖项:

ws2_32.lib
libapr-1.lib
libapriconv-1.lib
libaprutil-1.lib
cppunitd_dll.lib
右键生成 activemq-cpp,经过漫长的编译后在activemq-cpp\vs2010-build\Win32\Debug文件夹生成libactivemq-cppd.dll、libactivemq-cppd.lib库文件。

猜你喜欢

转载自blog.csdn.net/pigautumn/article/details/76836837