Компиляция расширения PHP Intl на Mac Book Pro (El Capitan 10.11.4)


Я пытаюсь установить расширение PHP Intl на мой новый Mac (El Capitan 10.11.4) с помощью PECL, но на этапе 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

Кто - нибудь сталкивался с этим раньше? Или знаете, как скомпилировать расширение PHP Intl на новом Mac Book Pro (El Capitan 10.11.4)? Я надеюсь на некоторые подсказки о том, где искать дальше, потому что я немного озадачен здесь.

4 8

4 ответа:

Я исправил эту проблему, вот мое окружение:

OS: El Capitan 10.11.4
PHP: php-7.0.5
реанимация : 55.1

Ключевым моментом является переустановка ICU с помощью --enable-rpath:

./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

Вы можете рассмотреть эти потоки (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