Pregunta

Editar:Revisando mi pregunta

Al crear un módulo PHP externo en C, ¿cómo vinculo objetos compartidos?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top