Как скомпилировать расширение PHP на OS X, используя SWIG

0

У меня есть программа, написанная на C, и ее нужно использовать в проекте PHP. Мне удастся использовать SWIG и скомпилированное расширение SO php на Ubuntu. Впоследствии я попытался использовать тот же SO файл в OS X, но php бросает следующую ошибку:

Ошибка PHP [2]: dl(): невозможно загрузить динамическую библиотеку '/usr/lib/php/extensions/no-debug-non-zts-20121212/extension.so' - dlopen (/usr/lib/php/extensions/no-debug-non-zts-20121212/extension.so, 9): не найдено подходящего изображения.
Нашли: /usr/lib/php/extensions/no-debug-non-zts-20121212/extension.so: неизвестный тип файла, первые восемь байтов: 0x7F 0x45 0x4C 0x46 0x02 0x01 0x01 0x00

Я предложил проблему, вызванную компиляцией на другой операционной системе, и решил создать SO файл в OS X. Я сделал следующее:

swig -php extension.i
gcc 'php-config --includes' -fpic -c extension_wrap.c extension.c
gcc -shared extension_wrap.o extension.o -o extension.so

На Ubuntu эти три команды выполняются успешно, и я получаю SO файл, который отлично работает с PHP на Ubuntu (но не работает в OS X).
В OS X я получаю следующее исключение из компилятора:

Неопределенные символы для архитектуры x86_64: "__efree", на которые ссылаются: _SWIG_Php_GetModule в extension_wrap.o............................................................................................................................. "_zval_is_true", на который ссылаются: __wrap_swig_extension_alter_newobject в extension_wrap.o ld: символ не найден для архитектуры x86_64 clang: ошибка: команда компоновщика завершилась с кодом выхода 1 (используйте -v, чтобы увидеть вызов)

(Я немного сократил выход).

Я буду признателен, если кто-нибудь может посоветовать, как построить расширение PHP на OS X или использовать расширение, основанное на Ubuntu.

заранее спасибо

Теги:
macos
swig
shared-libraries

1 ответ

1
Лучший ответ

Последовательность команд, созданных совместно используемой библиотекой, которая может быть успешно использована с PHP на OS X (10.10):

swig -php extension.i
gcc 'php-config --includes' -fpic -c extension_wrap.c extension.c
gcc -bundle -bundle_loader /usr/bin/php -dynamic *.o -o extension.so

Я все еще не понимаю, как это решение работает, но по крайней мере оно работает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню