Ubuntu18.04下编译安装PHP7.2的RocketMQ扩展

一、说明

RocketMq是一个由阿里巴巴开源的消息中间件,脱胎去阿里内部使用的MetaQ,在设计上借鉴了Kafka。2012年开源,2017年成为apache顶级项目。 rocketmq默认只提供了长连接的服务,并且阿里只给了java版本的sdk, 对于其他语言的sdk一直都由开源社区进行维护,盼了这么久,终于找到了php的rocketmq扩展,肥了九牛二虎之力,终于编译成功。在此做个回顾和记录。

php的Rocketmq扩展并不是直连rocketmq服务,而是php连接php-rocketmq扩展,php-rocketmq扩展再连接cpp-rocketmq扩展,最终通过cpp连接到rocketmq服务,不过鉴于cpp和c语言的运行效率很高,其实PHP扩展本身的性能还OK。

二、安装基础依赖

要确保系统安装的gcc版本支持全功能VC++11,一般gcc版本大于8.0均支持VC++11, 此外还需要安装cmake服务

apt-get install gcc cmake automake libtool  

三、安装CPP-Rocketmq扩展(C++的rocketmq扩展)

RocketMQ-Client-CPP安装

cd /data/rocketmq  
git clone  https://github.com/apache/rocketmq-client-cpp.git  
cd rocketmq-client-cpp/  
sh build.sh                ////这里脚本会自动编译和安装服务  

在国内,该扩展相关文件下载很慢, 直接编译容易超时,建议科学上网,下载代码库压缩包

boost_1_58_0.zipicon-default.png?t=N7T8https://download.youkuaiyun.com/download/ma_jian_ping/88359995

rocketmq-client-cpp-master.zipicon-default.png?t=N7T8https://download.youkuaiyun.com/download/ma_jian_ping/88360049

四、安装PHP-CPP依赖(支持编译cpp编写的php扩展)

git clone https://github.com/CopernicaMarketingSoftware/PHP-CPP.git  
cd PHP-CPP  
mv ../php-7.2.17/zend  ./zend         //需要用对应版本的php源码目录里面的zend覆盖PHP-CPP目录下的zend, 这样才能编译当前版本可用的扩展  
ln -s ../php7.2.17/php-config   /usr/bin/php-config      //编译PHP-CPP默认需要暴露php-config命令,Makefile里面用到了该命令的返回值  

make  
make install  

php的扩展一般是c语言写的,该依赖可以支持编译c++写的php扩展,为下一步做准备

jsoncpp-0.10.7.zipicon-default.png?t=N7T8https://download.youkuaiyun.com/download/ma_jian_ping/88359991

PHP-CPP-2.2.0.tar.gzicon-default.png?t=N7T8https://download.youkuaiyun.com/download/ma_jian_ping/88359915

五、安装PHP-RocketMQ扩展(PHP的Rocketmq扩展)

git clone https://github.com/lpflpf/rocketmq-client-php  
cd rocketmq-client-php  
mkdir -p /usr/include/phpcpp                    //创建php-cpp的C++编译依赖目录  
mv PHP-CPP/include/*  /usr/include/phpcpp/      //移动第3步中php-cpp源码下的include目录的全部内容到C++编译依赖目录  
mv PHP-CPP/phpcpp.h   /usr/include/             //移动phpcpp.h头文件到C++编译依赖默认目录  

make  
make install  

libevent-release-2.0.22-stableicon-default.png?t=N7T8https://download.youkuaiyun.com/download/ma_jian_ping/88359921

六、添加PHP扩展,测试扩展

第三步编译结束会生成以下文件:librocketmq.so

第四步编译结束会生成以下文件:libphpcpp.so.2.2.0

第五步编译结束会生成以下文件:rocketmq.so

然后执行以下操作:

mv libphpcpp.so.2.2.0  /usr/lib/libphpcpp.so.2.2  
mv librocketmq.so      /usr/lib/librocketmq.so  
mv rocketmq.so         /php/extensions/rocketmq.so      //自己的php扩展目录自己更改路径  
echo "extension=rocketmq.so" >> /php/config/php.ini     //php配置文件开启扩展  

php -m                                                  //测试php扩展是否可见  

七、可能遇到的问题

问题1:第三步执行编译脚本的时候发现报错,报错如下图

解决:编辑文件/data/rocketmq/rocketmq-client-cpp/tmp_down_dir/jsoncpp-0.10.6/src/lib_json/json_reader.cpp,如下图:

问题2:在解决第一个问题的时候遇到了,无论怎么改都会重复bug的问题,改完还报错,难道修改的文件不对吗?

解决: 因为在执行build.sh的时候,该脚本每次都是重新拉取jsoncpp-0.10.6模块,然后再重新解压,这样就会覆盖掉我们在第一个问题的解决方案中修改的文件,导致修改不生效,所以我们要阻止build.sh每次都重新拉取jsoncpp-0.10.6 ,修改build.sh文件如下图:

问题3:在编译完成后,添加完php扩展配置,进行“PHP -m“测试的时候,rocketmq扩展报错

解决:报这个错误的原因是和php的安装路径有关,因为在编译扩展过程中需要用到php-config程序返回的php配置信息,如果你的php-config返回的配置异常,就会导致扩展编译后的状态不正常,如下图,这需要你重新编译php,重新配置该参数,然后再重新编译rocketmq扩展(或者直接用apt安装php,这样各种参数都是配置好的,不用关心这么多配置)

这个地方废了我好多时间,深层次的原因还没有找到,重新编译php后这个问题没有再出现,以后有机会再深究吧!

<think>好的,用户之前问的是在Ubuntu 20.04下,CUDA 11.1和cuDNN 8.0.5应该选哪个TensorRT版本。我之前推荐了TensorRT 7.2.3,但现在用户回复说这个版本支持的是Ubuntu 18.04,可能遇到了兼容性问题。 首先,我需要确认用户的问题。用户可能下载了针对Ubuntu 18.04的TensorRT包,结果在20.04安装时出现不兼容的情况。或者用户发现官方文档中提到的TensorRT 7.2.3只列明了支持18.04,担心在20.04上无法使用。 接下来,我需要检查TensorRT 7.2.x是否确实不支持Ubuntu 20.04。查阅NVIDIA的官方文档,发现虽然TensorRT 7.2.3主要是为Ubuntu 18.04设计的,但通常高版本的系统可能向下兼容,或者可能有不同的安装包。也有可能用户找到的下载链接确实是针对18.04的,导致安装失败。 然后,考虑解决方案。可能的途径包括:1. 寻找是否有适用于Ubuntu 20.04的TensorRT 7.2.3的特定版本;2. 使用Ubuntu 18.04的包并尝试在20.04安装,处理可能的依赖问题;3. 升级CUDA到更高版本,从而使用支持20.04的TensorRT版本;4. 使用其他安装方式,如deb包或通过Docker镜像。 需要验证每个方案的可行性。例如,检查NVIDIA是否提供了针对20.04的TensorRT 7.2.x的安装包。如果官方没有提供,可能需要手动处理依赖,或者建议用户升级CUDA和cuDNN到与TensorRT 8.x兼容的版本。此外,用户可能不愿意升级CUDA,因为现有的项目依赖特定版本,所以需要权衡利弊。 另外,用户可能对系统稳定性有要求,不希望进行大规模升级,因此需要提供最简解决方案。比如,通过调整安装步骤,解决依赖问题,或者使用deb包安装。同时,需要提醒用户注意版本冲突,避免破坏现有环境。 最后,总结可行的方案,并给出步骤清晰的建议,确保用户能按步骤操作,同时解释每个方法的优缺点,让用户根据自身情况选择。</think>--- ### **问题定位** 如果发现官方提供的TensorRT 7.2.3安装包仅标注支持Ubuntu 18.04,而在Ubuntu 20.04安装失败或报依赖错误,可能是由于以下原因: 1. **系统库依赖不兼容**:Ubuntu 20.04的GCC版本(9.3+)和C++标准库可能与TensorRT 7.2.3默认构建的Ubuntu 18.04环境(GCC 7.5)存在差异。 2. **官方未提供预编译Ubuntu 20.04包**:NVIDIA可能未为TensorRT 7.2.3发布适配Ubuntu 20.04的二进制文件。 --- ### **解决方案** #### **方案1:强制安装Ubuntu 18.04的TensorRT包** 尽管官方未明确支持,但可通过手动修复依赖关系尝试安装: ```bash # 下载TensorRT 7.2.3的Ubuntu 18.04包 wget https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/secure/7.2.3.4/tars/TensorRT-7.2.3.4.Ubuntu-18.04.x86_64-gnu.cuda-11.1.cudnn8.0.tar.gz # 解压并安装Python包(忽略系统警告) tar -xzvf TensorRT-7.2.3.4.Ubuntu-18.04.x86_64-gnu.cuda-11.1.cudnn8.0.tar.gz cd TensorRT-7.2.3.4 sudo python3 -m pip install python/tensorrt-7.2.3.4-cp38-none-linux_x86_64.whl --force-reinstall # 修复动态库依赖(关键步骤) sudo apt-get install libssl1.1 libgflags2.2 # 安装Ubuntu 18.04的兼容库 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/TensorRT-7.2.3.4/lib ``` **风险提示**: - 可能导致`libstdc++`版本冲突(需确保`libstdc++6` ≥ 3.4.25)。 - 部分功能可能不稳定(如ONNX解析器)。 --- #### **方案2:使用Debian包安装(推荐)** NVIDIA为TensorRT 7.2.3提供了`.deb`格式的安装包,可能对Ubuntu 20.04更友好: ```bash # 下载.deb包(需登录NVIDIA账号) wget https://developer.download.nvidia.cn/compute/machine-learning/repos/ubuntu2004/x86_64/tensorrt_7.2.3.4-1+cuda11.1_amd64.deb # 安装依赖项 sudo apt-get install libnvinfer7=7.2.3-1+cuda11.1 libnvinfer-plugin7=7.2.3-1+cuda11.1 # 安装主包 sudo dpkg -i tensorrt_7.2.3.4-1+cuda11.1_amd64.deb ``` **验证安装**: ```bash dpkg -l | grep tensorrt # 应显示7.2.3-1版本 ``` --- #### **方案3:使用Docker容器隔离环境** 若宿主机必须使用Ubuntu 20.04,可通过NVIDIA官方Docker镜像避免系统冲突: ```bash # 拉取CUDA 11.1 + cuDNN 8.0.5 + TensorRT 7.2.3的镜像 docker pull nvcr.io/nvidia/tensorrt:20.12-py3 # 启动容器(自动匹配依赖) docker run -it --gpus all nvcr.io/nvidia/tensorrt:20.12-py3 ``` --- #### **方案4:升级TensorRT版本(需同步升级CUDA)** 若可接受CUDA升级,推荐以下组合: 1. **升级到CUDA 11.3**: ```bash wget https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda_11.3.0_465.19.01_linux.run sudo sh cuda_11.3.0_465.19.01_linux.run ``` 2. **安装TensorRT 8.2.x**: ```bash sudo apt-get install tensorrt=8.2.5.1-1+cuda11.4 # 需匹配CUDA 11.3+环境 ``` --- ### **版本兼容性总结** | 方案 | 优点 | 缺点 | |---------------------|---------------------------|---------------------------| | 强制安装18.04包 | 保留原有CUDA/cuDNN版本 | 依赖冲突风险高 | | 使用.deb包安装 | 官方适配,稳定性较好 | 需手动解决依赖 | | Docker容器 | 环境隔离,无系统污染 | 需要学习Docker使用 | | 升级CUDA+TensorRT | 获得长期支持 | 需重新配置CUDA环境 | --- ### **最终建议** 1. **优先尝试方案2.deb安装)**,确保依赖库版本正确。 2. 若需长期维护,**方案4(升级CUDA+TensorRT 8.2.x)** 更可靠。 3. 临时测试场景可使用**方案3(Docker)**避免系统改动。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泪痕110

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值