Fork me on GitHub

The WebDevil

Enjoy development

Столкнулся с необходимостью добавить к PHP в макоси несколько экстеншенов.
Апач в MacOS работает в x86_64. Да-да, там бинарник для нескольких архитектур:

file `which httpd`

Проблема в том что по умолчанию экстеншены будут собираться под i386. И потому из php-cli они доступны и работают, в то время как в mod_php их нет, а в логах апача видно примерно такое:

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/extensions/no-debug-non-zts-20060613/mcrypt.so' - (null) in Unknown on line 0

Для сборки под несколько архитектур надо собирать все зависимости также под несколько архитектур. Я решил ограничиться вариантом x86_64 и i386.

Итак, в /opt/local/etc/macports/macports.conf добавим требуемые архитектуры:

sudo echo 'universal_archs x86_64 i386'>> /opt/local/etc/macports/macports.conf

Чудесно. Теперь на примере gettext.

sudo port install gettext +universal
file `which gettext`

В качестве вывода мы должны получить что-то вроде

dm@Loki ~$ file `which gettext`
/opt/local/bin/gettext: Mach-O universal binary with 2 architectures
/opt/local/bin/gettext (for architecture i386): Mach-O executable i386
/opt/local/bin/gettext (for architecture x86_64):   Mach-O 64-bit executable x86_64

Далее нужны сорсы php. В сорсах есть папка ext.

cd php-5.2.8/ext/gettext
phpize

CFLAGS="-arch i386 -arch x86_64 -g -Os -pipe -no-cpp-precomp" \
CCFLAGS="-arch i386 -arch x86_64 -g -Os -pipe" \
CXXFLAGS="-arch i386 -arch x86_64 -g -Os -pipe" \
LDFLAGS="-arch i386 -arch x86_64 -bind_at_load" \
./configure --with-gettext=/opt/local

make
sudo make install
sudo echo 'extension=gettext.so' >> /etc/php.ini
sudo apachectl restart

Предварительно убедитесь, что у Вас есть файл /etc/php.ini. По умолчанию его нет.

После этого модуль должен завестись в mod_php.

UPD: а чобы (по возможности) все из портов собиралось с флагом universal надо сделать

echo '+universal' >> /opt/local/etc/macports/variants.conf

Comments are closed.