Vincular una extensión PHP escrita en C
-
19-09-2019 - |
Pregunta
Editar:Revisando mi pregunta
Al crear un módulo PHP externo en C, ¿cómo vinculo objetos compartidos?
Solución
Si su código de extensión C utiliza una biblioteca compartida, tiene que declarar que en el archivo config.m4
.
fuertemente ext_skel
secuencia de comandos que se incluye en la fuente de PHP para generar un config.m4 esqueleto:
./ext_skel --extname=myextension
Dado que va a asociar a una biblioteca, por convención se debe utilizar las opciones --with-myextension
(en contraposición a --enable-myextension
). Descomentar las líneas correspondientes del config.m4 y rellenar los detalles de su lib.
Algo parecido a lo siguiente:
# --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
])
A continuación, para construirlo, ejecute:
phpize
./configure --with-myextension
make
Por último es necesario copiar el módulo (o ln -s
) a donde quiera que su sistema espera para encontrarlo.
Si todo funcionó entonces php -m
debe incluir su módulo en la lista.
Por desgracia nunca he encontrado una buena referencia en línea de comandos config.m4 de PHP - los libros para esto son Sara Golemon de Extensión y empotrado PHP y también partes de George Avanzado de PHP Programación de Schlossnagle.
Hay una guía para principiantes razonables para la creación de extensiones PHP por Sara Goleman aquí , sino por la comida que realmente necesita su libro.