php 安装 grpc 扩展
升级gcc
默认gcc的版本为4.8.5,grpc扩展需要支持c++14
查询对照的话gcc6.1就可以完全至此c++14 (转载至)如图:
踩过的坑,重新安装升级了gcc 6.5.0的版本,安装grpc还是提示如下:
可能是安装升级的方式不对,大家可自行尝试。
后来用这个升级了gcc之后安装一次性成功 《Linux安装GCC+升级GCC流程详解》
升级gcc之后,就可以按照下方grpc官网的教程安装grpc的扩展
RELEASE_TAG_HERE 替换成自己需要的版本分支 grpc/tags
当前选择的是 v1.50.1
git clone -b v1.50.1 https://github.com/grpc/grpc
默认git版本为1.8版本的比较不稳定,建议升级git版本,git clone成功率会比较高
clone过程中可能超时多尝试几次 如图:
cd grpc # 如下命令根据grpc根目录的.gitmodules文件进行更新,有多个子模块执行过程中可能有多次失败,多尝试几次
# 执行
git submodule update --init
1 # 下载完成后执行 2 EXTRA_DEFINES=GRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK make 3 grpc_root="$(pwd)" 4 cd src/php/ext/grpc 5 phpize 6 GRPC_LIB_SUBDIR=libs/opt ./configure --enable-grpc="${grpc_root}" --with-php-config=/usr/local/php74/bin/php-config 7 make && make install
安装完成之后grpc.so会放在php的扩展目录下 /usr/local/php74/lib/php/extensions/no-debug-non-zts-20190902/
更新php.ini
1 vim /usr/local/php74/etc/php.ini 2 extension=grpc.so 3 # 保存重新启动php进程 4 systemctl restart php-fpm74
php -m 查看安装的模块
macos中如提示如下:
PHP Warning: PHP Startup: Unable to load dynamic library '/opt/homebrew/Cellar/php@8.1/8.1.17/pecl/20210902/grpc.so' (tried: /opt/homebrew/Cellar/php@8.1/8.1.17/pecl/20210902/grpc.so (dlopen(/opt/homebrew/Cellar/php@8.1/8.1.17/pecl/20210902/grpc.so, 0x0009): Library not loaded: libgrpc.dylib Referenced from: <4098739C-97E9-3A96-B8F8-8CCA65C7D7F9> /opt/homebrew/lib/php/pecl/20210902/grpc.so Reason: tried: 'libgrpc.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OSlibgrpc.dylib' (no such file), 'libgrpc.dylib' (no such file), '/usr/local/lib/libgrpc.dylib' (no such file), '/usr/lib/libgrpc.dylib' (no such file, not in dyld cache), '/opt/homebrew/etc/php/8.1/conf.d/libgrpc.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/etc/php/8.1/conf.d/libgrpc.dylib' (no such file), '/opt/homebrew/etc/php/8.1/conf.d/libgrpc.dylib' (no such file), '/usr/local/lib/libgrpc.dylib' (no such file), '/usr/lib/libgrpc.dylib' (no such file, not in dyld cache)), /opt/homebrew/lib/php/pecl/20210902//opt/homebrew/Cellar/php@8.1/8.1.17/pecl/20210902/grpc.so.so (dlopen(/opt/homebrew/lib/php/pecl/20210902//opt/homebrew/Cellar/php@8.1/8.1.17/pecl/20210902/grpc.so.so, 0x0009): tried: '/opt/homebrew/lib/php/pecl/20210902//opt/homebrew/Cellar/php@8.1/8.1.17/pecl/20210902/grpc.so.so' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/lib/php/pecl/20210902//opt/homebrew/Cellar/php@8.1/8.1.17/pecl/20210902/grpc.so.so' (no such file), '/opt/homebrew/lib/php/pecl/20210902//opt/homebrew/Cellar/php@8.1/8.1.17/pecl/20210902/grpc.so.so' (no such file))) in Unknown on line 0 Warning: PHP Startup: Unable to load dynamic library '/opt/homebrew/Cellar/php@8.1/8.1.17/pecl/20210902/grpc.so' (tried: /opt/homebrew/Cellar/php@8.1/8.1.17/pecl/20210902/grpc.so (dlopen(/opt/homebrew/Cellar/php@8.1/8.1.17/pecl/20210902/grpc.so, 0x0009): Library not loaded: libgrpc.dylib Referenced from: <4098739C-97E9-3A96-B8F8-8CCA65C7D7F9> /opt/homebrew/lib/php/pecl/20210902/grpc.so Reason: tried: 'libgrpc.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OSlibgrpc.dylib' (no such file), 'libgrpc.dylib' (no such file), '/usr/local/lib/libgrpc.dylib' (no such file), '/usr/lib/libgrpc.dylib' (no such file, not in dyld cache), '/opt/homebrew/etc/php/8.1/conf.d/libgrpc.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/etc/php/8.1/conf.d/libgrpc.dylib' (no such file), '/opt/homebrew/etc/php/8.1/conf.d/libgrpc.dylib' (no such file), '/usr/local/lib/libgrpc.dylib' (no such file), '/usr/lib/libgrpc.dylib' (no such file, not in dyld cache)), /opt/homebrew/lib/php/pecl/20210902//opt/homebrew/Cellar/php@8.1/8.1.17/pecl/20210902/grpc.so.so (dlopen(/opt/homebrew/lib/php/pecl/20210902//opt/homebrew/Cellar/php@8.1/8.1.17/pecl/20210902/grpc.so.so, 0x0009): tried: '/opt/homebrew/lib/php/pecl/20210902//opt/homebrew/Cellar/php@8.1/8.1.17/pecl/20210902/grpc.so.so' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/lib/php/pecl/20210902//opt/homebrew/Cellar/php@8.1/8.1.17/pecl/20210902/grpc.so.so' (no such file), '/opt/homebrew/lib/php/pecl/20210902//opt/homebrew/Cellar/php@8.1/8.1.17/pecl/20210902/grpc.so.so' (no such file))) in Unknown on line 0
需要将grpc根目录把 php警告信息中的 libgpr.dylib、libgrpc.dylib 复制到 /usr/local/lib
# 当前是在grpc根目录
cp libs/opt/libgpr.dylib /usr/local/lib
cp libs/opt/libgrpc.dylib /usr/local/lib