长期以来,我一直在维护自己的 PECL 包国际扩展适用于 PHP 5,但现在升级到 PHP 7 时,我无法构建与 PHP 捆绑的扩展。
在全新安装的情况下,我从 PHP 源目录的基础执行以下操作:
cd ext/intl
phpize
./configure --with-icu-dir=/usr
make
Configure 顺利完成,但 Make 抛出一堆我无法理解的 Zend 错误。最后一条消息为make: *** [intl_convertcpp.lo] Error 1
。
我已粘贴其余输出在这里。
我已经尝试使用各种版本的 ICU 库,但结果似乎没有受到影响。查找库没有任何问题。我是否需要指定其他选项才能完成构建?
请注意:我特意将其构建为独立扩展,以便我可以使用自定义(较新)ICU 安装。我的 PHP 运行时来自 Remi repo,但它的国际包裹依赖于 CentOS 7 基础存储库中的 ICU 50.1.2。但是,即使安装了该基础存储库版本(并且位于正常位置),我仍然无法使用上面显示的标准方法构建扩展。
答案1
经过大量的谷歌搜索,我发现在这里回答。
我需要一个更新版本的 GCC 编译器。CentOS 7 更新 repo 有 v4.8.5,但__builtin_ssubl_overflow
错误消息表明我至少需要 v5。
借助这个StackOverflow 问题我通过安装获得了一个更新的编译器devtoolset-7然后像这样构建:
cd ext/intl
phpize
CXX=/opt/rh/devtoolset-7/root/usr/bin/g++ \
./configure --with-icu-dir=/usr
make
成功