Question

Modifier: Ma question Révision

Lors de la construction d'un module PHP externe C, comment puis-je lier des objets partagés?

Était-ce utile?

La solution

Si votre code C extension utilise une bibliothèque partagée, vous devez déclarer que dans le fichier config.m4.

fortement ext_skel script qui est inclus dans la source de PHP pour générer un squelette config.m4:

./ext_skel --extname=myextension

Puisque vous vous liez à une bibliothèque, par convention, vous devez utiliser les options de --with-myextension (par opposition à --enable-myextension). Décommenter les lignes pertinentes du config.m4 et remplir les détails de votre lib.

Quelque chose comme ce qui suit:

  # --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
  ])

Ensuite, pour le construire, exécutez:

phpize
./configure --with-myextension
make

Enfin, vous devez copier votre module (ou ln -s) à chaque fois que votre système attend de le trouver.

Si tout a travaillé alors php -m devrait inclure votre module dans la liste.

Malheureusement, je ne l'ai jamais trouvé une bonne référence en ligne aux commandes de config.m4 de PHP - les livres en sont Sara Golemon Extension et de PHP Embedding et aussi des parties de George programmation PHP Advanced Schlossnagle .

Il y a un guide de débutants raisonnables pour la création d'extensions PHP par Sara Goleman ici , mais pour la viande que vous avez vraiment besoin de son livre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top