Liaison d'une extension PHP écrit en C
-
19-09-2019 - |
Question
Modifier: Ma question Révision
Lors de la construction d'un module PHP externe C, comment puis-je lier des objets partagés?
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.