Связывание расширения PHP, написанного на C - PullRequest
3 голосов
/ 02 октября 2009

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

Как построить внешний модуль PHP в C, как связать общие объекты?

1 Ответ

12 голосов
/ 03 октября 2009

Если ваш код расширения C использует разделяемую библиотеку, вы должны указать это в файле config.m4.

I настоятельно рекомендуем использовать сценарий 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 от Sara Goleman здесь , но для мяса вам действительно нужна ее книга.

...