Windows编译ActiveMQ-cpp-Library
编译环境、编译工具:
win10系统
Visual Studio 2017(需要安装windows SDK 8.1组件)
cmake 3.18
准备组件:
1.OpenSSL 1.0.2u
可以自己编译,也可以下载第三方编译好的
我使用的是第三方OpenSSL下载地址:http://slproweb.com/products/Win32OpenSSL.html
2.apr-1.7.0、apr-util-1.6.1、apr-iconv-1.2.2(下载地址:https://apr.apache.org/)一定要下载win32-src,否则会导致编译各种问题
3.cppunit-1.15.1(下载地址:https://www.freedesktop.org/wiki/Software/cppunit/)
4.expat-2.2.9(下载地址:https://github.com/libexpat/libexpat/releases)
5.ActiveMQ-Cpp-library-3.9.0(下载地址:https://activemq.apache.org/components/cms/download/)
编译步骤:
一、编译expat:
1.解压expat-2.2.9.tar.gz
2.命令行进入expat-2.2.9目录
3.创建vs项目目录:mkdir build
4.使用cmake创建vs解决方案:cmake .. -G "Visual Studio 15"
5.cmake输出如下信息时,表示vs解决方案创建完毕
6.使用vs2017打开expat/build目录下的expat.sln,打开解决方案,使用Release x86模式编译libexpat项目,在expat/build/Release目录下得到编译好的libexpat.lib和libexpat.dll动态链接库文件,头文件目录即/expat/lib目录
二、编译CppUnit:
1.解压cppunit-1.15.1.tar.gz
2.用VS2017打开/cppunit/examples目录下的examples2008.sln解决方案。打开过程中,由于examples2008.sln是VS2008创建的项目,所以VS2017会提示项目需要迁移升级,确认即可。
如果升级期间,提示某些项目需要“覆盖项目及其导入的属性表”,选择否。否则会导致关键的项目无法正确载入
升级完毕后,需要我们确认选择更高级的工具集,确认选择即可
3.使用Release x86编译关键项目“cppunit_dll”。在/cppunit/lib目录下,有我们生成的cppunit_dll.lib和cppunit_dll.dll动态链接库,头文件目录在/cppunit/include
三、安装OpenSSL
将我们下载的OpenSSL-win32-1.0.2安装到指定目录即可(我是安装在C盘根目录下)
四、编译apr、apr-util、apr-iconv组件
1.解压arp-1.7.0-win32-src.zip、apr-iconv-1.2.2-win32-src.zip、apr-util-1.6.1-win32-src.zip三个压缩包到同一个目录下,并删除目录后的版本号(同目录,删除文件夹后的版本号非常关键)
目录结构如下(可以按我的目录结构解压源码):
2.用vs2017打开/apr-util/aprutil.dws解决方案,此时仍旧会提示我们解决方案是旧版本,需要迁移升级,参考之前的步骤确认升级即可(项目更改升级时间会比较长,需要等待一会,期间vs2017可能会出现假死)
3.按顺序依次使用Release x86模式编译 libapr、libapriconv、libaprutil。
4.编译arp中,会出现如下apr_arch_misc.h报错
这个问题卡了很久,后来在外网才找到解决方案,修改/apr/include/apr.hw 89行
#define _WIN32_WINNT 0x0501改为#define _WIN32_WINNT 0x0600
5.编译libaprutil时,需要先提前设置之前编译好的expat的include目录和lib目录,将libarputil的链接-输入中的$(XML_PARSER).lib换成libexpat.lib
6.编译完之后,在apr/Relase、apr-iconv/Release、apr-util/Release目录下分别找到对应的dll和lib,保存即可
PS:在编译activemq过程中,有的环境提示缺少cppunit,有的不缺少,我只遇到过一台PC环境需要,所以只做了说明,不会加入到具体步骤当中
至此,编译ActiveMQ-cpp-library的准备工作全部完成
下面就是最后一部,编译ActiveMQ-cpp-library组件
1.解压activemq-cpp-library-3.9.0-src.zip为activemq-cpp-library,打开/activemq-cpp-library/vs2010-build
2.由于解决方案是vs2010的,所以又要升级迁移解决方案
3.迁移升级完成后,编译模式,我选择ReleaseSSL_DLL(支持ssl、动态链接库)、win32模式
4.将我们需要的active-cpp项目,添加之前编译的apr、apr-iconv、apr-util的头文件目录和库目录,以及OpenSSL的头文件和库目录地址(我是用的openSSL的VC动态库)。active-cpp项目已经帮我们添加好了链接-输入的libapr-1.lib,所以不需要我们再添加了
5.编译过程中,会提示无法解析外部符号“[email protected]”,“[email protected]”,“[email protected]”
网上查了一下,这是因为没有引入WinDDK里的Advapi32.lib库的原因
手动在项目链接-输入中添加Advapi32.lib
重新编译,大功告成!
库备份
1.将active-cpp-library/src/main目录复制出来,这个目录就是mq的头文件
2.将active-cpp-library/vs2010-build/Win32/ReleaseSSL-DLL里的activemq-cpp.dll、activemq-cpp.lib复制出来
3.将arp运行库中的libapr-1.lib和libapr-1.dll复制出来
以上所有文件备份到一个目录当中,这就是我们以后基于activeMQ开发所需要完整的头文件、链接库