Вопрос

Редактировать:Пересматриваю Свой вопрос

При создании внешнего 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 от Сары Гоулман здесь, но для мяса вам действительно нужна ее книга.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top