背景:
通过编译 php-rdkafka 源码(参考链接),得到rdkafka.so 库,将rdkafka.so放在其他机器运行出错。
错误1:
- 现象:
运行命令 php -v 报错如下:
PHP Warning: PHP Startup: Unable to load dynamic library 'rdkafka.so' (tried: /usr/local/lib/php/extensions/no-debug-non-zts-20170718/rdkafka.so (/lib64/libc.so.6: version `GLIBC_2.14' not found (required by /usr/local/lib/php/extensions/no-debug-non-zts-20170718/rdkafka.so)), /usr/local/lib/php/extensions/no-debug-non-zts-20170718/rdkafka.so.so (/usr/local/lib/php/extensions/no-debug-non-zts-20170718/rdkafka.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP 7.2.10 (cli) (built: Dec 31 2020 08:55:00) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
运行 php -i | grep rdkafka 报错如下:
PHP Warning: PHP Startup: Unable to load dynamic library 'rdkafka.so' (tried: /usr/local/lib/php/extensions/no-debug-non-zts-20170718/rdkafka.so (/lib64/libc.so.6: version `GLIBC_2.14' not found (required by /usr/local/lib/php/extensions/no-debug-non-zts-20170718/rdkafka.so)), /usr/local/lib/php/extensions/no-debug-non-zts-20170718/rdkafka.so.so (/usr/local/lib/php/extensions/no-debug-non-zts-20170718/rdkafka.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
- 原因:
/lib64/libc.so.6: version `GLIBC_2.14' not found
rdkafka.so 库需要的依赖 `GLIBC_2.14' 没有找到。
主要是因为编译 rdkafka.so 库的机器安装的PHP 版本, 和 使用rdkafka.so 库 机器安装的PHP版本不一致,导致缺少依赖,
建议编译环境和运行环境的PHP版本一致。
- 解决:
保持编译rdkafka.so 环境的PHP版本和使用rdkafka.so 环境的PHP 版本一致。
错误2:
- 现象:
运行 php -v
运行 php -i | grep rdkafka
运行代码 php producer.php
php: symbol lookup error: /usr/local/lib/php/extensions/no-debug-non-zts-20170718/rdkafka.so: undefined symbol: zend_object_alloc
- 原因:
rdkafka.so 库没有zend_object_alloc
主要是因为编译rdkafka.so 库的源码支持的PHP版本不对应。
建议下载支持 该PHP版本的 php-rdkafka 源码进行编译。
- 解决:
下载支持 该PHP版本的 php-rdkafka 源码编译rdkafka.so
下载各个版本php-rdkafka 源码地址: http://pecl.php.net/package/rdkafka
下载最新版本php-rdkafka 源码地址: https://github.com/arnaud-lb/php-rdkafka