Установка intl в OS X 10.6.6: недопустимая библиотека (возможно, не библиотека PHP) intl.so

Я пытаюсь установить расширение PHP intl в своей новой установке OS X 10.6.6, используя поставляемую с ним версию PHP (v5.3.3).

Я знаю, что для расширения требуется ICU, поэтому я установил его с помощью homebrew. Моя установленная версия ICU — 4.4.1 и хранится в /usr/local/Cellar/icu4c/4.4.1.

Я пробовал два разных способа установить расширение intl:

пекл установить

pecl запросил у меня префикс ICU, который равен /usr/local/Cellar/icu4c/4.4.1. configure запустилась без проблем, однако make прервалась с ошибкой:

/private/var/tmp/apache_mod_php/apache_mod_php-53~1/Build/tmp/pear/temp/intl/collator/collator_class.c:107: ошибка: дублировать «статический» make: * [ collator/collator_class.lo] Ошибка 1 ОШИБКА: `make' не удалось

строить напрямую

Я скачал текущую версию PHP (v5.3.5), а затем установил расширение intl из ext/intl, запустив:

phpize && 
configure --enable-intl --with-icu-dir=/usr/local/Cellar/icu4c/4.4.1 && 
make && 
make test && 
sudo make install

Это, казалось, сработало; Я получил расширение в каталоге расширений PHP и не получил никаких сообщений об ошибках.

Файл говорит мне: Mach-O 64-битный пакет x86_64

Однако, когда я загрузил расширение в php.ini, я получил сообщение:

Предупреждение PHP: запуск PHP: недопустимая библиотека (возможно, не библиотека PHP) '/usr/lib/php/extensions/no-debug-non-zts-20090626/intl.so' в неизвестном, строка 0

Я понятия не имею, почему это происходит. Я предполагаю, что это связано с тем, что расширение установлено из PHP версии 5.3.5, а я использую версию 5.3.3, но я не могу представить, что два выпуска исправлений нарушат совместимость.

Любые идеи?

ОБНОВЛЕНИЕ 2011-03-16:

Я нашел решение! Когда я явно устанавливаю флаг -m64 в configure (который указывает gcc создавать 64-битный код), тогда расширение загружается правильно:

CFLAGS=-m64 CPPFLAGS=-m64 CCASFLAGS=-m64 ./configure


person Sebastian    schedule 15.03.2011    source источник
comment
Почему бы вам не использовать один из существующих пакетов, таких как Zend Server CE (поддерживает intl из коробки: files.zend.com/help/previous-version/), MAMP или аналогичный?   -  person wimvds    schedule 15.03.2011
comment
@wimvds Я бы хотел использовать те вещи, которые уже принадлежат им. Я имею в виду, почему у меня должно быть два веб-сервера Apache на одной машине?   -  person Sebastian    schedule 15.03.2011
comment
@rik macports уродлив. Он устанавливает вам порты, которые уже являются частью OS X, такие как ssh или perl. Самое неприятное, что портированные версии иногда работают иначе, чем версии для Mac, например, ssh имеет аргумент keychain в OS X, которого нет в версии из портов. Если вы устанавливаете порт с ssh в качестве отл. а затем вызовите ssh с аргументом keychain, вы назовете версию macports (потому что это первый каталог bin в $ PATH), а затем -> дерьмо   -  person Sebastian    schedule 15.03.2011
comment
@Sebastian: Вы можете легко отключить собственный apache, чтобы он не использовал никаких ресурсов (кроме небольшого объема дискового пространства). Вы можете либо тратить свое время, пытаясь найти решение (мое предположение: проверьте свой исполняемый файл php, смешивание 32-битного с 64-битным не будет работать), либо просто установить пакет и начать разработку. Это ваш выбор :с.   -  person wimvds    schedule 15.03.2011
comment
@wimvds: для меня информатика означает управлять компьютером, а не только использовать его. Вы правы, когда говорите, что я сейчас зря трачу время, и да, поиск причины такой проблемы кажется не очень продуктивным, но для меня это своего рода религиозный вопрос ;-) Ваша догадка об архитектуре хороша, но я посмотрел на вывод файла для моего двоичного файла php, и он сделан для Intel 32, Intel 64 и даже для мощного ПК, поэтому я не думаю, что это проблема архитектуры.   -  person Sebastian    schedule 15.03.2011
comment
@Sebastian: Значит, ты на Снежном Барсе? Просто попробуйте скомпилировать расширение как универсальный двоичный файл (как для x86_64, так и для i386) и посмотрите, решит ли это вашу проблему.   -  person wimvds    schedule 15.03.2011
comment
@wimvds: я решил проблему! Мне пришлось изменить флаги configure для компиляции с -m64. Вывод файла не изменился, но PHP загружает расширение. Теперь не знаю, в чем разница, но это работает ;-) Я добавлю свое решение в пост, надеясь, что оно будет полезно для других.   -  person Sebastian    schedule 16.03.2011


Ответы (1)


Может быть, немного поздно, но вот сообщение о том, как добавить intl в OS X Lion с помощью системных инструментов:

http://mansion.im/2011/php-with-intl-and-gettext-on-osx-lion/

person David Morales    schedule 24.12.2011