Связывание расширения PHP, написанного на C
Edit: Пересмотр Моего Вопроса
При построении внешнего модуля PHP на языке C, как связать общие объекты?
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 здесь, но для мяса вам действительно нужна ее книга.