开发者问题收集

Swoole php 模块:未定义符号:spl_ce_Countable 问题

2019-01-09
2471

我试图在我的计算机上安装 swoole

首先:

pecl install swoole

然后我需要一个 php 模块

cd swoole         
phpize             
./configure        
make               
sudo make install  

该脚本在我的文件夹中创建了一个 swoole.so,因此我将它添加到我的 php.ini 中:

extension=/usr/lib/php/20151012/swoole.so

当我尝试 php -v 时,我得到了:

PHP 警告:PHP 启动:无法加载动态库“/usr/lib/php/20151012/swoole.so”(尝试:/usr/lib/php/20151012/swoole.so(/usr/lib/php/20151012/swoole.so: 未定义符号:spl_ce_Countable ), /usr/lib/php/20170718//usr/lib/php/20151012/swoole.so.so (/usr/lib/php/20170718//usr/lib/php/20151012/swoole.so.so: 无法打开共享对象文件:没有此文件或目录)) 位于 Unknown 的第 0 行 PHP 7.2.13-1+ubuntu16.04.1+deb.sury.org+1 (cli) (构建时间:2018 年 12 月 7 日 08:07:08) ( NTS ) 版权所有 (c) 1997-2018 The PHP Group Zend Engine v3.2.0,版权所有 (c) 1998-2018 Zend Technologies 带有 Zend OPcache v7.2.13-1+ubuntu16.04.1+deb.sury.org+1,版权所有 (c) 1999-2018,作者 Zend Technologies 带有 Xdebug v2.6.1,版权所有 (c) 2002-2018,作者 Derick Rethans

这个错误是什么:未定义符号:spl_ce_Countable?

非常感谢。

3个回答

大多数情况下,当您尝试加载依赖于其他尚未加载或未启用的扩展的扩展时,会抛出此类错误。因此,建议通过 phpenmod 加载它。一些 Linux 发行版(如 Debian 或 Ubuntu)使用 PHP mods-available 来加载 PHP 扩展。

您可以在以下目录 /etc/php/<PHP_VERSION>/mods-available 中手动创建一个扩展名文件(如 openswoole.ini ),其中包含以下数据

; Configuration for Open Swoole
; priority=30
extension=openswoole

或者您可以运行以下命令,记得将 <PHP_VERSION> 更改为您的 php 版本

sudo bash -c "cat > /etc/php/<PHP_VERSION>/mods-available/openswoole.ini << EOF
; Configuration for Open Swoole
; priority=30
extension=openswoole
EOF"


sudo phpenmod -s cli openswoole


php -m | grep openswoole
Abdul Jabbar
2022-01-25

我的机器上安装了多个 php 版本。但版本 7.2 没有 php-config 文件。

sudo apt-get install php7.2-dev

这解决了我的问题

感谢 @Álvaro González

David Auvray
2019-01-10

我遇到了同样的问题,所以请仔细阅读。

如果 php 模块是从 mods-available 文件夹加载的,请不要手动将 extension=swoole.so 添加到 php.ini,而是必须将 swoole.ini 文件添加到 php mods-available 文件夹。

;configuration for php common module
;priority=20
extension=swoole.so

并使用 sudo phpenmod swoole 启用它>

如果您手动将 extension=swoole.so 添加到 php.ini,它会在所有必需的扩展之前连接。 例如,如果你在 swoole 安装中添加了 --enable-sockets 等,并且 swoole 扩展在 sockets 扩展之前加载,则它将失败,因此,我从 php.ini 中删除 extension=swoole.so,将 swoole.ini 文件添加到 php mods-available 文件夹并使用 sudo phpenmod swoole 启用它后,swoole 就可以正常工作了。

复制自: https://github.com/swoole/swoole-src/issues/3952#issuecomment-782765934

Tomatoes
2023-11-04