Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MacBookPro上编译PHP Intl扩展(El Capitan 10.11.4)_Php_Macos_Pear_Pecl - Fatal编程技术网

在MacBookPro上编译PHP Intl扩展(El Capitan 10.11.4)

在MacBookPro上编译PHP Intl扩展(El Capitan 10.11.4),php,macos,pear,pecl,Php,Macos,Pear,Pecl,我试图使用PECL在我的新Mac(El Capitan 10.11.4)上安装PHP Intl扩展,但在make阶段出现链接错误 以下是我采取的步骤: 已安装PEAR以在Mac上运行 将ICU库(51.2版)编译并安装到/usr/local/lib 运行此命令:sudo pecl install intl,出现错误(请参见下文)。我还尝试直接从PHP源代码(“ext”文件夹)编译扩展,并收到相同的错误消息 我得到以下错误: ld: file not found: libicudata.51.dy

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

以下是我采取的步骤:

  • 已安装PEAR以在Mac上运行

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

  • 运行此命令:
    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
    
    它看起来像:

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

  • 然后,还存在某种架构不匹配。因此,我运行了
    文件libicudata.51.dylib
    ,它似乎是正确的体系结构

  • 以下是重新调谐的
    文件

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

    以前有人见过这个吗?或者知道如何在新的MacBookPro(ElCapitan10.11.4)上编译PHP的Intl扩展?我希望能找到下一步的线索,因为我在这里有点难堪。

    < P>你可以考虑看这些线程()和()。我试图重现你的错误,但失败了。最可能的原因是icu4c未链接

    尝试使用
    brew链接--强制使用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
    重症监护病房:55.1

    关键点是使用
    --启用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
    

    当您尝试用
    cc-licudata-o test test.C
    编译C存根程序(
    int main(){return 0;}
    )时会发生什么?我按照您的建议进行了尝试,存根
    test.C
    程序编译时没有任何错误消息。您需要使用PECL吗?您可能想考虑使用自制程序,因为它非常有效地工作。好问题。我得到了一个新的Mac,在阅读了SIP限制之后,我想最好是单独安装应用程序和库。如果我想了解更多关于各种开关和选项的信息,至少对于我更经常使用的软件来说,这也是一件好事。就你的观点而言,我也能看出这是一种过度的杀伤力;对于普通用户来说,这是糟糕的过去。我在哪里可以看到自制软件包是如何制作的?在准备自制软件包时,一定有人遇到过类似类型的错误。那么,有什么地方可以查到吗?我正在使用PHP5.5,它是在2016年2月20日构建的。我可以尝试构建PHP5.6,看看构建该扩展是否有效。@BiagioArobba您可以brew安装php56,brew取消PHP55的链接等等,您编译了它,请继续编译php56好的,我尝试过升级。因此,我编译了最新的ICU57.1和PHP5.6.20,并得到了相同的错误消息
    ld:file not found:。。。对于体系结构x86_64
    我刚使用brew,因此无法查看,但感谢您的帮助!