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


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

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

以下是我采取的步骤:

  1. 已安装PEAR以在Mac 上运行

  2. 将ICU库(版本51.2)编译并安装到/usr/local/lib

  3. 运行此命令: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的Intl扩展?我希望能得到一些关于下一步该去哪里的提示,因为我在这里有点困惑。

也许你可以试试这个:

brew install php56-intl

您可以考虑查看这些线程(https://github.com/Homebrew/homebrew-php/issues/1701)以及(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

尝试运行:

brew install homebrew/php/php56-intl

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

操作系统: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

如果你想知道原因,请以根的身份运行

otool -L $YOUR_ICU_PREFIX/lib/libicudata.dylib

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