从0开始完成ActiveMQ-cpp在windows_x86平台的编译(从编译openssl开始)

简介

由于需要将一个项目从linux迁移到windows系统,在互联网没有找到【免费】且【免登录】的x64资源,openssl也已经找不到1.1.1w版本的下载资源了,所以我搭建了虚拟机环境,从编译openssl开始完成activemq的项目编译。

基础环境安装

编译环境介绍

电脑系统:win10 1909

cpu:ryzen 2700x

安装visual studio 2010

下载地址

复制代码
ed2k://|file|cn_visual_studio_2010_professional_x86_dvd_532145.iso|2591844352|6001253431AFE573E4344F5A0B1D9CAC|/

安装

复制代码
1. 双击打开:cn_visual_studio_2010_professional_x86_dvd_532145.iso
2. 双击steup.exe安装visual studio 2010

编译openssl1.1.1

安装strawberry-perl

下载地址

复制代码
https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/SP_54201_64bit/strawberry-perl-5.42.0.1-64bit.msi

安装nasm

下载地址

复制代码
https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/win64/nasm-2.15.05-installer-x64.exe

本地编译openssl_1.1.1

下载openssl_1.1.1w源码

复制代码
https://github.com/openssl/openssl/releases/download/OpenSSL_1_1_1w/openssl-1.1.1w.tar.gz

解压openssl_1.1.1源码

复制代码
tar -xzvf openssl-1.1.1w.tar.gz

编译openssl_1.1.1w源码

复制代码
1. 在开始菜单找到"Visual Studio x64 Win64 命令提示(2010)",右键管理员打开
2. cd [openssl解压目录]  例如:cd C:\Users\admin123\Desktop\openssl-1.1.1w
3. perl configure VC-WIN64A --prefix="C:\Users\admin123\Desktop\openssl-1.1.1w\build_x64" no-asm   //如果是32位,则将VC-WIN64A改为VC-WIN32
4. nmake clean   //清理上次编译内容
5. nmake //编译openssl
6. nmake tests  //测试编译的openssl是否正常
7. 新建目录 C:\Users\admin123\Desktop\openssl-1.1.1w\build_x64
6. nmake install //安装到"C:\Users\admin123\Desktop\openssl-1.1.1w\build_x64"

本地编译apr库

下载地址

复制代码
https://dlcdn.apache.org/apr/apr-1.7.6-win32-src.zip

解压源码

复制代码
使用windows解压软件,解压apr-1.7.6-win32-src.zip

禁用ipv6

复制代码
修改include\apr.hw文件,将#define APR_HAVE_IPV6改为0

开始编译

复制代码
// x64 Release
nmake -f Makefile.win ARCH="x64 Release" PREFIX="C:\Users\admin123\Desktop\activemq\apr-1.7.6\build_x64_Release" buildall install clean
// ***************
// 本人仅完成了x64编译,以下命令遇到的问题自行处理
// ***************
// x64 Debug
nmake -f Makefile.win ARCH="x64 Debug" PREFIX="C:\Users\admin123\Desktop\activemq\apr-1.7.6\build_x64_Debug" buildall install clean
// Win32 Release
nmake -f Makefile.win ARCH="Win32 Release" PREFIX="C:\Users\admin123\Desktop\activemq\apr-1.7.6\build_win32_Release" buildall install clean
// Win32 Debug
nmake -f Makefile.win ARCH="Win32 Debug" PREFIX="C:\Users\admin123\Desktop\activemq\apr-1.7.6\build_win32_Debug" buildall install clean

// 示例:编译并运行测试,仅支持debug模式
nmake -f Makefile.win ARCH="x64 Debug" PREFIX="C:\Users\admin123\Desktop\activemq\apr-1.7.6\build_x64" buildall checkall install clean

编译apriconv库

下载地址

复制代码
https://dlcdn.apache.org//apr/apr-iconv-1.2.2-win32-src.zip

解压源码

复制代码
使用windows解压软件,解压apr-1.7.6-win32-src.zip

环境准备

复制代码
1.使用visual studio 2010打开apriconv.dsw文件
2.在apriconv项目右键"属性"
3.在"配置属性"->"VC++目录"->"包含目录"中设置apr库头文件的路径
4.在"配置属性"->"VC++目录"->"库目录"中设置apr库文件的路径
// 下面这个是编译出dll必须的的,仅编译lib可以忽略
5.在"配置属性"->"链接器"->"输入"->"附加依赖项"中加入"libapr-1.lib"

编译lib

复制代码
1.选择Release和x64,开始编译window_x64_release架构的lib库
2.输出目录"x64"

编译dll

复制代码
1.在apriconv项目右键"属性"
2.将"配置属性"->"常规"中的"目标文件扩展名"和"配置类型"改为dll
3.选择Release和x64,开始编译window_x64_release架构的dll库
2.输出目录"x64"

编译aprutil库

下载地址

复制代码
https://dlcdn.apache.org//apr/apr-util-1.6.3-win32-src.zip

解压源码

复制代码
使用windows解压软件,解压apr-util-1.6.3-win32-src.zip

环境准备

安装expat组件

说明:此组件aprutil项目有依赖

下载地址

复制代码
// 32位
https://github.com/libexpat/libexpat/releases/download/R_2_7_3/expat-win32bin-2.7.3.zip
// 64位
https://github.com/libexpat/libexpat/releases/download/R_2_7_3/expat-win64bin-2.7.3.zip

解压zip

复制代码
使用windows解压软件,解压expat-win64bin-2.7.3.zip

目录结构准备

复制代码
// 备注:以下这么改是因为Makefile.win中对相关项目路径进行了指定
1.将apr库的源码目录更名为apr
2.将apriconv库的源码目录更名为apr-iconv
3.将aprutil库的源码目录更名为apr-util

// 备注:这个没有强制要求
4.在Source目录新建目录expat,在expat目录中新增子目录include
5.将expat-win64bin-2.7.3.zip中的Source\lib目录内容复制到include目录中
6.将expat-win64bin-2.7.3.zip中的Bin目录内容复制到expat中

层级结构如下:
Source/
├─apr/
├─apr-iconv/
├─apr-util/
└─expat/
    └─include/

在visual studio 2010中打开项目

复制代码
使用visual studio 2010打开目录中的aprutil.dsw文件

配置apr_crypto_openssl项目依赖

复制代码
1.在"配置属性"->"VC++目录"->"包含目录"中设置openssl库头文件的路径(openssl-1.1.1w\build_x64\include)
2.在"配置属性"->"VC++目录"->"库目录"中设置open库文件的路径(openssl-1.1.1w\build_x64\lib)
// 在ssl_1.1.1版本中,ssl的库改名了,需要手动调整
3.在"配置属性"->"链接器"->"输入"->"附加依赖项"中添加"libcrypto.lib"和"libssl.lib"
4.在"配置属性"->"链接器"->"输入"->"附加依赖项"中删除"libeay32.lib"和"ssleay32.lib"

配置aprutil项目依赖

复制代码
// 配置apr库路径
1.在"配置属性"->"VC++目录"->"库目录"中设置apr库文件的路径(apr/x64)
// 配置apr-iconv库路径
2.在"配置属性"->"VC++目录"->"库目录"中设置apriconv库文件的路径(apr-iconv/x64)
// 配置expat库路径
3.在"配置属性"->"VC++目录"->"包含目录"中设置expat库头文件的路径(Source/expat/include)
4.在"配置属性"->"VC++目录"->"库目录"中设置expat库文件的路径(Source/expat)
// 编译dll时,增加明确依赖项,lib可以忽略
5.在"配置属性"->"链接器"->"输入"->"附加依赖项"中添加库"libapr-1.lib、libexpat.lib、apriconv-1.lib、wldap32.lib"

开始编译

复制代码
在visual studio 2010中,选择x64_Release架构,开始编译

编译activeMQ库

下载地址

复制代码
https://dlcdn.apache.org/activemq/activemq-cpp/3.9.5/activemq-cpp-library-3.9.5-src.zip

解压源码

复制代码
使用windows解压软件,解压activemq-cpp-library-3.9.5-src.zip

环境准备

复制代码
1.使用visual studio 2010打开vs2010-build/activemq-cpp.sln
2.在"配置属性"->"VC++目录"->"包含目录"添加apr、apriconv、aprutil、openssl头文件所在目录
2.在"配置属性"->"VC++目录"->"库目录"添加apr、apriconv、aprutil、openssl库文件所在目录
4.在"配置属性"->"链接器"->"输入"->"附加依赖项"中添加配置"libapr-1.lib;apriconv-1.lib;aprutil-1.lib;ws2_32.lib;"

开始编译

复制代码
1.在visual studio 2010中,选择x64_Release开始编译

结束语

从创建虚拟机到最终完成x64_release版本的activemq-cpp编译,总计耗时3天。

尝试使用默认配置编译apr库,但是没有成功,所以屏蔽了ipv6功能。

相关推荐
Lisonseekpan1 天前
Kafka、ActiveMQ、RabbitMQ、RocketMQ对比
java·后端·kafka·rabbitmq·rocketmq·activemq
程序员老舅3 天前
C++ STL 算法:从原理到工程实践
linux·c++·stl·c/c++·数据结构与算法
武子康7 天前
Java-199 JMS Queue/Topic 集群下如何避免重复消费:ActiveMQ 虚拟主题与交付语义梳理
java·分布式·消息队列·rabbitmq·activemq·mq·java-activemq
huangyuchi.9 天前
【Linux 网络】理解并应用应用层协议:HTTP(附简单HTTP服务器C++代码)
linux·服务器·网络·网络协议·http·c/c++
ZXF_H12 天前
C/C++ OpenSSL自适应格式解析证书二进制字节流
c语言·开发语言·c++·openssl
huangyuchi.12 天前
【Linux网络】深入理解守护进程(Daemon)及其实现原理
linux·运维·服务器·c/c++·守护进程·会话·进程组
小股虫15 天前
从零开始:ActiveMQ安装、Java应用实战与Web控制台体验
java·activemq·java-activemq
夏霞15 天前
c# ActiveMQ
开发语言·c#·activemq
好评12416 天前
C/C++ 内存管理:摆脱野指针和内存泄漏
开发语言·c++·内存管理·c/c++
龚建波19 天前
记录:vcpkg清单模式安装指定版本的curl和OpenSSL
openssl·curl·vcpkg