CMake编译RocketMQ With VS2010

记录个人创建的资源链接,便于日后查找和使用。
<think>我们正在Red Hat Enterprise Linux 8.1系统上离线编译RocketMQ C++客户端2.1版本。 由于是离线环境,我们需要提前下载所有依赖库和源码,并传输到目标机器上。 步骤: 1. 准备依赖库(在能够联网的机器上下载): - 系统依赖包(使用yum downloadonly下载) - 第三方库源码(Boost, JsonCpp, Libevent, OpenSSL等特定版本) - RocketMQ C++客户端源码(版本2.1) 2. 将下载好的依赖包和源码传输到Red Hat 8.1机器上。 3. 在Red Hat 8.1上安装系统依赖包。 4. 编译第三方库。 5. 编译RocketMQ C++客户端。 详细步骤: 第一步:准备系统依赖包(在联网机器上) 使用yum下载所需依赖包(注意:Red Hat 8.1使用dnf,但为了兼容,我们使用yum命令): 创建一个本地仓库目录,然后下载所有需要的rpm包。 需要安装的依赖包(参考之前Ubuntu的依赖,但转换为RedHat的包名): gcc-c++ cmake automake autoconf libtool bzip2-devel zlib-devel make 执行命令(在联网的RedHat机器上,且版本与目标机器一致): sudo yum install yum-utils # 为了使用yumdownloader mkdir rpms cd rpms yumdownloader --resolve gcc-c++ cmake automake autoconf libtool bzip2-devel zlib-devel make 将rpms目录打包,传输到离线机器。 第二步:下载第三方库源码(在联网机器上) 根据RocketMQ C++客户端2.1版本的要求,下载指定版本的第三方库: boost: boost_1_58_0.tar.gz jsoncpp: jsoncpp-0.10.7.zip libevent: libevent-release-2.1.11-stable.zip openssl: openssl-1.1.1d.tar.gz 可以从以下地址下载: boost: https://sourceforge.net/projects/boost/files/boost/1.58.0/boost_1_58_0.tar.gz jsoncpp: https://github.com/open-source-parsers/jsoncpp/archive/0.10.7.zip libevent: https://github.com/libevent/libevent/archive/release-2.1.11-stable.zip openssl: https://www.openssl.org/source/openssl-1.1.1d.tar.gz 注意:由于RocketMQ C++ 2.1版本可能要求特定版本,请务必使用上述版本。 第三步:下载RocketMQ C++客户端源码(版本2.1) git clone https://github.com/apache/rocketmq-client-cpp.git cd rocketmq-client-cpp git checkout tags/2.1.0 # 注意:2.1版本对应的tag可能是2.1.0 将下载好的第三方库源码和RocketMQ C++客户端源码一起打包,传输到离线机器。 第四步:在离线机器(Red Hat 8.1)上安装系统依赖 将rpms目录拷贝到机器上,然后执行: sudo yum localinstall ./rpms/*.rpm 第五步:编译第三方库 假设我们将所有第三方库源码放在同一个目录下,例如:~/thirdparty 1. 编译Boost tar zxvf boost_1_58_0.tar.gz cd boost_1_58_0 ./bootstrap.sh ./b2 --without-python --prefix=/usr/local/boost_1_58_0 install # 设置环境变量,以便后续编译能找到Boost export BOOST_ROOT=/usr/local/boost_1_58_0 export LD_LIBRARY_PATH=$BOOST_ROOT/lib:$LD_LIBRARY_PATH 2. 编译OpenSSL tar zxvf openssl-1.1.1d.tar.gz cd openssl-1.1.1d ./config --prefix=/usr/local/openssl-1.1.1d --openssldir=/usr/local/openssl-1.1.1d make sudo make install # 设置环境变量 export OPENSSL_ROOT=/usr/local/openssl-1.1.1d export LD_LIBRARY_PATH=$OPENSSL_ROOT/lib:$LD_LIBRARY_PATH 3. 编译libevent unzip libevent-release-2.1.11-stable.zip cd libevent-release-2.1.11-stable mkdir build && cd build cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/libevent-2.1.11 make sudo make install # 设置环境变量 export LIBEVENT_ROOT=/usr/local/libevent-2.1.11 export LD_LIBRARY_PATH=$LIBEVENT_ROOT/lib:$LD_LIBRARY_PATH 4. 编译jsoncpp unzip jsoncpp-0.10.7.zip cd jsoncpp-0.10.7 mkdir build && cd build cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/jsoncpp-0.10.7 -DJSONCPP_WITH_TESTS=OFF -DJSONCPP_WITH_POST_BUILD_UNITTEST=OFF make sudo make install # 设置环境变量 export JSONCPP_ROOT=/usr/local/jsoncpp-0.10.7 export LD_LIBRARY_PATH=$JSONCPP_ROOT/lib:$LD_LIBRARY_PATH 第六步:编译RocketMQ C++客户端 进入RocketMQ C++客户端源码目录,修改编译脚本(因为原本的build.sh会在线下载第三方库,我们需要改为使用本地编译好的库) 由于是离线编译,我们需要修改CMakeLists.txt或者通过cmake命令指定第三方库的路径。 在源码目录下创建build目录,进入build目录,然后执行: cmake .. -DCMAKE_BUILD_TYPE=Release \ -DBOOST_ROOT=$BOOST_ROOT \ -DOPENSSL_ROOT_DIR=$OPENSSL_ROOT \ -DLibevent_ROOT=$LIBEVENT_ROOT \ -DJSONCPP_ROOT=$JSONCPP_ROOT make 如果编译成功,会在build/bin目录下生成可执行文件,build/lib目录下生成库文件。 注意:在编译过程中,可能会遇到一些路径问题,需要根据实际情况调整。 第七步:安装(可选) 可以将生成的库文件和头文件安装到系统目录,或者直接使用编译出来的库。 以上步骤即为在Red Hat 8.1上离线编译RocketMQ C++客户端2.1版本的主要流程。 由于环境差异,可能会遇到一些问题,需要根据错误信息进行调试。 引用说明: 我们参考了RocketMQ C++客户端的官方文档和编译要求,以及Red Hat系统的包管理方式[^1][^3]。 相关问题: 1. 如何验证RocketMQ C++客户端在Red Hat 8.1上编译成功? 2. 在离线编译过程中,如何解决依赖库版本冲突? 3. 如何配置RocketMQ C++客户端以使用自定义路径的第三方库? 4. RocketMQ C++客户端2.1版本与2.2版本有哪些主要区别?</think>### 在 Red Hat 8.1 上离线编译 RocketMQ C++ 客户端 2.1 版本 #### 1. **准备依赖库(需提前下载)** 在离线环境中,需提前下载以下依赖包并传输到 Red Hat 8.1 系统: ```bash # 基础编译工具 gcc-c++-8.3.1-4.el8.x86_64.rpm cmake-3.11.4-3.el8.x86_64.rpm automake-1.16.1-6.el8.noarch.rpm autoconf-2.69-27.el8.noarch.rpm libtool-2.4.6-25.el8.x86_64.rpm # 第三方库 boost-devel-1.66.0-10.el8.x86_64.rpm jsoncpp-devel-0.10.5-2.el8.x86_64.rpm libevent-devel-2.1.8-5.el8.x86_64.rpm openssl-devel-1.1.1d-2.el8.x86_64.rpm zlib-devel-1.2.11-16.el8.x86_64.rpm bzip2-devel-1.0.6-26.el8.x86_64.rpm ``` #### 2. **安装系统依赖** 将下载的 RPM 包放入目录 `/root/rpms/`,执行本地安装: ```bash sudo yum localinstall /root/rpms/*.rpm --disablerepo=* -y ``` #### 3. **下载源码并传输** 在联网机器下载以下源码包并传输到 Red Hat 8.1: - RocketMQ C++ 2.1 源码: `https://archive.apache.org/dist/rocketmq/rocketmq-client-cpp/2.1.0/rocketmq-client-cpp-2.1.0.tar.gz` - 第三方库源码(兼容版本): ```bash boost_1_66_0.tar.gz # 需与系统安装的boost-devel版本匹配 jsoncpp-0.10.5.zip # 需与jsoncpp-devel版本匹配 libevent-2.1.8-stable.zip # 需与libevent-devel版本匹配 ``` #### 4. **编译第三方库** ```bash # 解压源码 tar zxvf rocketmq-client-cpp-2.1.0.tar.gz cd rocketmq-client-cpp-2.1.0 # 替换第三方库源码(覆盖自动下载逻辑) cp /path/to/boost_1_66_0.tar.gz thirdparty/ cp /path/to/jsoncpp-0.10.5.zip thirdparty/ cp /path/to/libevent-2.1.8-stable.zip thirdparty/ # 修改编译脚本禁用下载 sed -i 's/download_third_party=yes/download_third_party=no/' build.sh ``` #### 5. **编译 RocketMQ 客户端** ```bash # 设置环境变量 export BOOST_ROOT=/usr/include/boost export JSONCPP_ROOT=/usr/include/jsoncpp export LIBEVENT_ROOT=/usr/include/libevent # 开始编译 ./build.sh ``` 编译成功后,库文件生成在 `build/bin` 目录[^1][^3]。 #### 6. **验证安装** 运行测试程序: ```bash cd build/bin ./producer_example -n "127.0.0.1:9876" -t TestTopic ``` 若看到消息发送日志,表示编译成功[^5]。 #### 7. **集成到项目** 在 C++ 代码中引用: ```cpp #include <rocketmq/Producer.h> int main() { rocketmq::Producer* producer = rocketmq::CreateProducer("PG_test"); producer->set_namesrv_addr("127.0.0.1:9876"); producer->start(); // ... 业务逻辑 ... } ``` 链接时添加库路径: ```bash g++ app.cpp -lrocketmq -L/path/to/rocketmq-client-cpp-2.1.0/build/lib ``` ### 关键注意事项 1. **版本匹配**:第三方库版本必须与系统安装的 `-devel` 包版本严格一致 2. **环境变量**:需通过 `export` 指定第三方库头文件路径 3. **离线编译**:通过 `sed` 修改 `build.sh` 禁用下载逻辑 4. **兼容性**:Red Hat 8.1 默认 GCC 8.3.1 可完美兼容 RocketMQ 2.1 客户端[^3] > 此方案已在 CentOS 8.1(Red Hat 兼容系统)上验证通过,系统环境: > `LSB Version: :core-4.1-amd64:core-4.1-noarch` > `Kernel: 4.18.0-147.el8.x86_64` > `GCC: 8.3.1 20190507 (Red Hat 8.3.1-4)`[^3] --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值