Edit: Ma question RévisionLiaison d'une extension PHP Écrit en C
Lors de la construction d'un module PHP externe C, comment puis-je lier des objets partagés?
Edit: Ma question RévisionLiaison d'une extension PHP Écrit en C
Lors de la construction d'un module PHP externe C, comment puis-je lier des objets partagés?
Si votre code d'extension C utilise une bibliothèque partagée, vous devez le déclarer dans le fichier config.m4
.
Je fortement vous recommandons d'utiliser le script ext_skel
qui est inclus dans la source de PHP pour générer un config.m4 squelette:
./ext_skel --extname=myextension
Puisque vous vous liez à une bibliothèque, par convention, vous devez utiliser les options --with-myextension
(par opposition à --enable-myextension
). Décommentez les lignes pertinentes dans le config.m4 et remplissez 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
) à l'endroit où votre système attend de le trouver.
Si tout cela fonctionnait alors php -m
devrait inclure votre module dans la liste.
Malheureusement, je n'ai jamais trouvé une bonne référence en ligne aux commandes config.m4 de PHP - les livres pour cela sont Sara Golemon's Extending and Embedding PHP et aussi des parties de George Schlossnagle's Advanced PHP Programming.
Il ya un guide de débutants raisonnable pour créer des extensions PHP par Sara Goleman here, mais pour la viande, vous avez vraiment besoin de son livre.