前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Linux】rocketmq-client-cpp 2.0.1 编译方法(基于 ARM 64 架构)

【Linux】rocketmq-client-cpp 2.0.1 编译方法(基于 ARM 64 架构)

作者头像
行者Sun
发布2024-09-02 11:57:41
1720
发布2024-09-02 11:57:41
举报
文章被收录于专栏:Linux

以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!

如果对您有帮助,烦请点赞、关注、转发!如果您有其他想要了解的,欢迎私信联系我~

背景介绍

近期,笔者同事在进行业务容器适配 ARM 64 的工作,但是遇到无法安装 rocketmq-client-cpp 2.0.1 动态库的问题,最终笔者帮忙解决了该问题。该问题的原因是 X86 架构下可以直接使用官方 yum 源进行安装,但是 ARM 64 架构下官方并未提供 yum 源。

本文基于 rocketmq-client-cpp 2.0.1 版本,通过源码编译方式生成 .so 动态库文件,以下为完整过程。

过程回顾

1、安装依赖(解决报错1)

代码语言:javascript
复制
yum install -y gcc-c++ cmake automake autoconf libtool bzip2-devel zlib-devel

2、下载 & 解压

代码语言:javascript
复制
cd
wget -O rocketmq-client-cpp-2.0.1.tar.gz https://github.com/apache/rocketmq-client-cpp/archive/refs/tags/2.0.1.tar.gz
tar -xzf rocketmq-client-cpp-2.0.1.tar.gz && cd rocketmq-client-cpp-2.0.1

3、修改 build.sh(解决报错2)

代码语言:javascript
复制
# 在函数 BuildBoost 中加入 >>>>>> <<<<<< 之间的内容
 
BuildBoost() {
  if [ $need_build_boost -eq 0 ]; then
    echo "no need build boost lib"
    return 0
  fi
 
  cd ${down_dir}
  if [ -e ${fname_boost} ]; then
    echo "${fname_boost} is exist"
  else
    wget http://sourceforge.net/projects/boost/files/boost/${fname_boost_down}
  fi
  tar -zxvf ${fname_boost} &> unzipboost.txt
  boost_dir=$(ls | grep ^boost | grep .*[^gz]$)
  cd ${boost_dir}
  if [ $? -ne 0 ]; then
    exit 1
  fi
  ./bootstrap.sh
  ##>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  ./b2 &>/dev/null       # 需要先运行 ./b2 以生成 /root/rocketmq-client-cpp-2.0.1/tmp_down_dir/boost_1_58_0/bin.v2 目录
  sleep 5
  rm -rf /root/rocketmq-client-cpp-2.0.1/tmp_down_dir/boost_1_58_0/bin.v2/project-cache.jam
  cp -p /root/project-cache.jam /root/rocketmq-client-cpp-2.0.1/tmp_down_dir/boost_1_58_0/bin.v2/project-cache.jam
  ##<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  if [ $? -ne 0 ]; then
    exit 1
  fi
  echo "build boost static #####################"
  pwd
  if [ $verbose -eq 0 ]; then
    echo "build boost without detail log."
    ./b2 -j$cpu_num cflags=-fPIC cxxflags=-fPIC --with-atomic --with-thread --with-system --with-chrono --with-date_time --with-log --with-regex --with-serialization --with-filesystem --with-locale --with-iostreams threading=multi link=static release install --prefix=${install_lib_dir} &> boostbuild.txt
  else
    ./b2 -j$cpu_num cflags=-fPIC cxxflags=-fPIC --with-atomic --with-thread --with-system --with-chrono --with-date_time --with-log --with-regex --with-serialization --with-filesystem --with-locale --with-iostreams threading=multi link=static release install --prefix=${install_lib_dir}
  fi
  if [ $? -ne 0 ]; then
    exit 1
  fi
}

4、修改 CMakeLists.txt(解决报错2)

代码语言:javascript
复制
sed -i "s/list(APPEND CXX_FLAGS \"-m64\")/#list(APPEND CXX_FLAGS \"-m64\")/g" CMakeLists.txt 
grep "m64" CMakeLists.txt

5、修改 project-cache.jam(解决报错2)

代码语言:javascript
复制
# 将以下 3 行改为 true(获取文件方法:第一次执行 build.sh 脚本,失败退出后复制/root/rocketmq-client-cpp-2.0.1/tmp_down_dir/boost_1_58_0/bin.v2/project-cache.jam)
module config-cache {
  ...
  set "arm-<target-os>linux-<toolset-gcc:version>4.8.5-<toolset>gcc" : "true" ;
  ...
  set "arm-<address-model>64-<target-os>linux-<toolset-gcc:version>4.8.5-<toolset>gcc" : "true" ;
  ...
  set "gcc visibility-<address-model>64-<target-os>linux-<toolset-gcc:version>4.8.5-<toolset>gcc" : "true" ;
  ...
}

6、执行脚本

代码语言:javascript
复制
bash build.sh

# 生成的文件位于 /root/rocketmq-client-cpp-2.0.1/bin 目录

附录

代码语言:javascript
复制
报错1:
libs/iostreams/src/bzip2.cpp:20:56: fatal error: bzlib.h: No such file or directory
 #include "bzlib.h"  // Julian Seward's "bzip.h" header.
                                                        ^
compilation terminated.
 
    "g++"  -ftemplate-depth-128 -O3 -finline-functions -Wno-inline -Wall -pthread -fPIC -fPIC -DBOOST_ALL_NO_LIB=1 -DBOOST_IOSTREAMS_USE_DEPRECATED -DNDEBUG  -I"." -c -o "bin.v2/libs/iostreams/build/gcc-4.8.5/release/link-static/threading-multi/bzip2.o" "libs/iostreams/src/bzip2.cpp"
 
...failed gcc.compile.c++ bin.v2/libs/iostreams/build/gcc-4.8.5/release/link-static/threading-multi/bzip2.o...
 
 
报错2:
error: unrecognized command line option “-m64”
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-02-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 实施运维知识交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档