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.csdn.net/download/ma_jian_ping/88359995

rocketmq-client-cpp-master.zipicon-default.png?t=N7T8https://download.csdn.net/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.csdn.net/download/ma_jian_ping/88359991

PHP-CPP-2.2.0.tar.gzicon-default.png?t=N7T8https://download.csdn.net/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.csdn.net/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后这个问题没有再出现,以后有机会再深究吧!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 在Ubuntu 18.04上安装编译环境非常简单,以下是详细的步骤: 1. 打开终端,使用以下命令更新系统软件包列表: ``` sudo apt update ``` 2. 确保系统已安装编译所需的基本工具和库文件,使用以下命令进行安装: ``` sudo apt install build-essential ``` 这将安装gcc、g++和make等工具,以及一些常用库文件。 3. 安装编译所需的其他依赖库,根据您需要编译的软件不同,安装的依赖库也会不同。一般来说,您只需要在终端中运行以下命令: ``` sudo apt install <dependency> ``` 将`<dependency>`替换为您需要安装的具体依赖库的名称。您可以在软件的官方文档或README文件中找到所需的依赖库列表。 4. 如果您需要在编译过程中使用其他开发工具或库文件,您也可以使用`apt`包管理器进行安装。例如,安装Java开发环境(JDK),可以运行以下命令: ``` sudo apt install default-jdk ``` 这将安装默认版本的JDK。 5. 安装编译环境后,您可以使用gcc编译C语言程序,使用g++编译C++语言程序。例如,要编译名为`hello.c`的C语言程序,可以运行以下命令: ``` gcc -o hello hello.c ``` 这将生成可执行文件`hello`。 6. 最后,您可以通过运行以下命令来执行编译后的程序: ``` ./hello ``` 确保您在运行可执行文件之前,进入到该文件所在的目录。 这些步骤将帮助您在Ubuntu 18.04上安装编译环境,并准备好编译和运行程序。根据您的需求,您还可以进一步安装其他开发工具和库文件。 ### 回答2: 编译环境是指能够进行源代码编译和生成可执行文件的一组软件工具。在Ubuntu 18.04上安装编译环境需要执行以下步骤: 1. 打开终端,并使用以下命令更新软件包列表: ```shell sudo apt update ``` 2. 安装基本编译工具,包括gcc、g++和make: ```shell sudo apt install build-essential ``` 3. 安装其他常用的编译工具,如git和cmake: ```shell sudo apt install git cmake ``` 4. 安装特定语言的编译器,如Java的OpenJDK: ```shell sudo apt install openjdk-8-jdk ``` 5. 安装特定库和开发包,根据自己的需要安装不同的库和开发包,例如OpenGL库和Python开发包: ```shell sudo apt install libgl1-mesa-dev python-dev ``` 6. 验证安装。使用以下命令验证编译环境是否安装成功: ```shell gcc --version g++ --version make --version ``` 以上步骤完成后,您的Ubuntu 18.04系统就已经具备了完整的编译环境。您可以使用这些工具编译和构建各种源代码,并生成可执行文件。根据不同的需求,您还可以进一步安装其他特定的开发工具和库。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

泪痕110

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

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

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

打赏作者

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

抵扣说明:

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

余额充值