php - 将 MacOS 更新到 Mojave (10.14) 后 PECL 扩展安装失败
问题描述
我使用我的 Mac 开发了三个项目:一个 Android 应用程序、一个 iPhone 应用程序和一个 Symfony 项目。
我的 Symfony 项目使用 Redis 和 APCu 扩展。这是通过 PECL 安装的(6 个月前),使用:
sudo pecl install redis
和
sudo pecl install apcu
昨天,在将我的 mac 更新到 Mojave 并尝试像往常一样启动我的 PHP 的内置 Web 服务器后,我收到以下错误:
尝试从全局命名空间加载类“Redis”。您是否忘记了“使用”声明?
我还注意到php.ini
在安装过程中已将其删除,因此我使用再次php.ini-previous
生成php.ini
。
还重新安装了命令行工具(在安装过程中被删除):
xcode-select --install
最后,我再次尝试通过 PECL 安装 redis 扩展:
sudo pecl install redis
这次PECL抛出错误:
creating libtool
appending configuration tag "CXX" to libtool
configure: creating ./config.status
config.status: creating config.h
running: make
/bin/sh /private/tmp/pear/temp/pear-build-root1vQ0zO/redis-4.1.1/libtool --mode=compile cc -I. -I/private/tmp/pear/temp/redis -DPHP_ATOM_INC -I/private/tmp/pear/temp/pear-build-root1vQ0zO/redis-4.1.1/include -I/private/tmp/pear/temp/pear-build-root1vQ0zO/redis-4.1.1/main -I/private/tmp/pear/temp/redis -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c /private/tmp/pear/temp/redis/redis.c -o redis.lo
mkdir .libs
cc -I. -I/private/tmp/pear/temp/redis -DPHP_ATOM_INC -I/private/tmp/pear/temp/pear-build-root1vQ0zO/redis-4.1.1/include -I/private/tmp/pear/temp/pear-build-root1vQ0zO/redis-4.1.1/main -I/private/tmp/pear/temp/redis -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c /private/tmp/pear/temp/redis/redis.c -fno-common -DPIC -o .libs/redis.o
In file included from /private/tmp/pear/temp/redis/redis.c:27:
/private/tmp/pear/temp/redis/common.h:1:10: fatal error: 'php.h' file not found
#include "php.h"
^~~~~~~
1 error generated.
make: *** [redis.lo] Error 1
ERROR: `make' failed
如何解决这个问题?
解决方案
运行以下命令将重新安装开发者工具头文件并修复问题。
$ sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
推荐阅读
- angular - 表单字段正在验证单击切换隐藏和显示
- ios - 在 Swift 屏幕上的列中显示数组中的字符串?
- c - 有没有办法完全清除数组?
- docker - 如何使主机目录在 Ubuntu 上可共享?
- c++ - 为什么向量“emplace_back”在多线程中的行为比单线程慢得多
- python - 为什么读取一些栅格数据并将其写入新的 tiff 会花费这么多时间?
- javascript - 如何修复:用于 if else 计算的单选按钮的 adlistener
- c# - 将 List 值分配给 Json 列表类
- move - 如何从特定语音频道获取用户 ID 以便在另一个频道中移动
- r - 如何对数据框的子集进行排序