Связывание расширения PHP, написанного на C


Edit: Пересмотр Моего Вопроса

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

1 3

1 ответ:

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

Я настоятельно рекомендую использовать ext_skel скрипт, который включен в исходный код PHP для создания конфигурации скелета.m4:

./ext_skel --extname=myextension

Поскольку вы ссылаетесь на библиотеку, по соглашению вы должны использовать параметры --with-myextension (в отличие от --enable-myextension). Раскомментируйте соответствующие строки в конфигурации.m4 и заполните детали вашего lib.

Что-то вроде следующее:

  # --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.М4 команд - книг для этого Сара Golemon расширение и встраивание PHP и и Джордж Schlossnagle передовые РНР Программирование .

Есть разумное руководство для начинающих по созданию расширений PHP от Sara Goleman здесь, но для мяса вам действительно нужна ее книга.