麒麟V10 arm cpu aarch64 下编译 RocketMQ-Client-CPP 2.2.0

国产自主可控服务器需要访问RocketMQ消息队列,最新的C++SDK是2020年发布的 rocketmq-client-cpp-2.2.0 这个版本支持TLS模式。 用默认的版本安装遇到一些问题,记录一下。

下载Releases · apache/rocketmq-client-cpp · GitHubhttps://github.com/apache/rocketmq-client-cpp/releases

操作系统信息:

复制代码
#uname -p
aarch64
#uname 
Linux
安装编译需要的工具
#yum install gcc gcc-c++ cmake automake autoconf libtool 

一是默认的boost_1_58_0编译无法通过。检测到的CPU变成了x64,未能检测出arm。使用boost_1_72_0 (更高的版本更改较大,删除了boost_1_72_0.tar.gz\boost_1_72_0\boost\detail\endian.hpp文件,后面编译通不过 )

boost-1_70_0

二是默认的openssl-1.1.1d编译通过,链接时报错:

bash 复制代码
/usr/bin/ld: ../../bin/lib/libcrypto.a(sha1-armv8.o): relocation R_AARCH64_PREL64 against symbol `OPENSSL_armcap_P' which may bind externally can not be used when making a shared object; recompile with -fPIC
../../bin/lib/libcrypto.a(sha1-armv8.o): In function `sha1_block_armv8':
(.text+0x1240): dangerous relocation: unsupported relocation

更新为openssl-1.1.1w版本。

三是将依赖的文件解压后放到rocketmq-client-cpp目录

bash 复制代码
#unzip rocketmq-client-cpp-2.2.0.zip
#mv boost_1_72_0.tar.gz jsoncpp-0.10.7.zip openssl-1.1.1w.tar.gz ./rocketmq-client-cpp-2.2.0

依赖库boost文件可以从 https://sourceforge.net/projects/boost/files/boost/1.72.0/https://sourceforge.net/projects/boost/files/boost/1.72.0/下载。

RocketMQ-Client-CPP2.2.0编译依赖库资源-CSDN文库https://download.csdn.net/download/eamon100/90487665四是修改 CMakeLists.txt,将186至190行注释掉(检测不了aarch64)

bash 复制代码
186             #    if (CMAKE_BUILD_BITS EQUAL 32)
187             #        list(APPEND CXX_FLAGS "-m32")
188             #    else () #not-condition
189             #        list(APPEND CXX_FLAGS "-m64")
190             #    endif ()

编译:

bash 复制代码
#./build.sh
相关推荐
想唱rap8 小时前
C++智能指针
linux·jvm·数据结构·c++·mysql·ubuntu·bash
前进吧-程序员9 小时前
现代 C++ 异步编程:从零实现一个高性能 ThreadPool (C++20 深度实践)
开发语言·c++·c++20
pearlthriving9 小时前
c++当中的泛型思想以及c++11部分新特性
java·开发语言·c++
t***54410 小时前
Dev-C++中哪些选项可以设置
开发语言·c++
2301_8035545211 小时前
C++ 并发核心:std::promise、std::future、std::async 超详细全解
开发语言·c++
EverestVIP11 小时前
C++ 成员函数的指针
c++
俺不要写代码11 小时前
线程启动、结束,创建线程多法、join,detach,线程的移动语义
服务器·开发语言·网络·c++
思麟呀11 小时前
应用层协议HTTP
linux·服务器·网络·c++·网络协议·http
小徐不徐说12 小时前
面试C++易错点总结
开发语言·c++·面试·职场和发展·程序设计·工作
xier_ran12 小时前
【C++】“内部”、“外部”、“派生类”、“友元“类
java·开发语言·c++