Связывание расширения PHP, Написанного на C
-
19-09-2019 - |
Вопрос
Редактировать:Пересматриваю Свой вопрос
При создании внешнего PHP-модуля на C, как мне связать общие объекты?
Решение
Если ваш код расширения C использует общую библиотеку, вам необходимо объявить это в config.m4
файл.
Я сильно рекомендую использовать ext_skel
скрипт, включенный в исходный код PHP для создания скелета config.m4:
./ext_skel --extname=myextension
Поскольку вы ссылаетесь на библиотеку, по соглашению вы должны использовать --with-myextension
варианты (в отличие от --enable-myextension
).Раскомментируйте соответствующие строки в config.m4 и заполните данные вашей библиотеки.
Что-то вроде следующего:
# --with-myextension -> check for lib and symbol presence
LIBNAME=the_lib_your_extension_needs # you may want to change this
LIBSYMBOL=some_symbol_in_the_lib_you_extension_needs # you most likely want to change this
PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL,
[
PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $MYEXTENSION_DIR/lib, MYEXTENSION_SHARED_LIBADD)
AC_DEFINE(HAVE_MYEXTENSIONLIB,1,[ ])
],[
AC_MSG_ERROR([wrong $LIBNAME lib version or lib not found])
],[
-L$MYEXTENSION_DIR/lib -ldl
])
Затем, чтобы создать его, запустите:
phpize
./configure --with-myextension
make
Наконец, вам нужно скопировать ваш модуль (или ln -s
) туда, где ваша система ожидает его найти.
Если бы все это сработало, тогда php -m
следует включить ваш модуль в список.
К сожалению, я никогда не находил хорошей онлайн-ссылки на команды PHP config.m4 - книги для этого Расширение и встраивание PHP Сары Големон а также части Продвинутое программирование Джорджа Шлосснагла на PHP.
Есть разумное руководство для начинающих по созданию расширений PHP от Сары Гоулман здесь, но для мяса вам действительно нужна ее книга.