在 Mac Book Pro (El Capitan 10.11.4) 上编译 PHP 国际扩展

Compiling PHP Intl extension on Mac Book Pro (El Capitan 10.11.4)

我正在尝试使用 PECL 在我的新 Mac (El Capitan 10.11.4) 上安装 PHP Intl 扩展,但在 make 阶段出现链接错误.

以下是我采取的步骤:

  1. 已在 Mac

  2. 上将 PEAR 安装到 运行
  3. 编译安装ICU库(51.2版)到/usr/local/lib

  4. 运行 这个命令:sudo pecl install intl 并且出现错误(见下文)。我还尝试直接从 PHP 源代码("ext" 文件夹)编译扩展并收到相同的错误消息。

我收到以下错误:

ld: file not found: libicudata.51.dylib for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [intl.la] Error 1
ERROR: 'make' failed

看起来像:

  1. 文件丢失(即使它知道要查找的正确 ICU 库版本)。也许它真的找不到文件。 -L 开关和相关开关似乎指向正确的路径 /usr/local/lib 路径。

  2. 然后,还有某种架构不匹配。所以,我 运行 file libicudata.51.dylib 它似乎是正确的架构。

这是 file 重新调整的内容:

$ file /usr/local/lib/libicudata.51.dylib
/usr/local/lib/libicudata.51.dylib: Mach-O 64-bit dynamically linked shared library x86_64

有没有人运行以前接触过这个?或者知道如何在新的 Mac Book Pro (El Capitan 10.11.4) 上编译 PHP 的国际扩展?我希望能得到一些关于下一步要去哪里的提示,因为我在这里有点难过。

您可以考虑查看这些主题 (https://github.com/Homebrew/homebrew-php/issues/1701) and (https://github.com/Homebrew/homebrew-php/issues/1710)。我试图重现你的错误,但我失败了。最可能的原因是未链接的 icu4c。

尝试使用 brew link --force icu4c

我尝试使用 php70 和

sudo pecl install intl

失败。我尝试使用php56,一切顺利运行。

尝试 运行 php -v master,应该会出现类似这样的内容

C02QH2D7G8WM:workspace userone$ php -v master
PHP 5.6.20 (cli) (built: Apr  1 2016 08:53:48) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

我解决了这个问题,这是我的环境:

OS : El Capitan 10.11.4
PHP : php-7.0.5
icu : 55.1

关键点是使用 --enable-rpath:

重新安装 ICU
./configure --prefix=/opt/oss/icu --enable-release --enable-shared --enable-rpath --enable-tools

如果你想知道为什么,请运行作为root

otool -L $YOUR_ICU_PREFIX/lib/libicudata.dylib

检查第一个库是否是绝对路径

也许你可以试试这个:

brew install php56-intl

尝试 运行:

brew install homebrew/php/php56-intl