Sommaire
Créer une extension
Compiler un module
|
7.6.1 Compiler un module
Il y a deux méthodes pour compiler les modules:
Utilisez le mécanisme de "make", présent dans le dossier
ext
, qui permet la compilation de
module dynamiquement chargeable.
Compilez les sources manuellement
La première méthode doit toujours être privilégiée, car, depuis
PHP 4.0, cela a été standardisé. Un système de compilation
sophistiqué a été introduit. Cette sophistication a aussi ses
inconvénients, malheureusement : elle est difficile à aborder.
Nous allons fournir une introduction plus détaillée plus tard
dans ce chapitre, mais commençons par regarder le fonctionnement
par défaut des fichiers.
La seconde méthode est valable pour ceux qui (pour diverses raisons),
n'ont pas accès au code source complet de PHP, n'ont pas
accès du tout aux sources, ou qui aiment se battre avec leur clavier.
Ces cas doivent rester exceptionnel. Pour être vraiment exhaustif,
nous allons aussi décrire cette méthode.
Pour compiler notre code source example avec le mécanisme standard,
copiez tous les sous dossiers de ext
dans votre distribution PHP. Puis, exécutez le fichier
buildconf
, qui va créer un script
configure
mis à jour, avec les options
appropriées pour les nouvelles extensions. Par défaut, toutes
les extensions sont désactivez. Nous n'avez pas à avoir de
crainte de perturber votre compilation.
Avec avoir exécuté buildconf
,
configure --help
affiche les modules
supplémentaires suivants :
--enable-array_experiments BOOK: Enables array experiments
--enable-call_userland BOOK: Enables userland module
--enable-cross_conversion BOOK: Enables cross-conversion module
--enable-first_module BOOK: Enables first module
--enable-infoprint BOOK: Enables infoprint module
--enable-reference_test BOOK: Enables reference test module
--enable-resource_test BOOK: Enables resource test module
--enable-variable_creation BOOK: Enables variable-creation module
Le module présenté un peu plus tôt dans Une extension simple
peut être activé avec --enable-first_module ou
--enable-first_module=yes.
Pour compiler manuellement vos modules, vous avez besoin des commandes suivantes :
>
>
Action |
Commande |
Compiler |
cc -fpic -DCOMPILE_DL=1 -I/usr/local/include -I.
-I.. -I../Zend -c -o <your_object_file>
<votre_fichier_c>
|
Linking |
cc -shared -L/usr/local/lib -rdynamic -o
<votre_fichier_de_module>
<vos_fichier(s)_objet(s)>
|
La commande de compilation du module indique simplement au compilateur
de générer du code position-independent (-fpic ne doit pas
être oublié) et de plus, définit la constante COMPILE_DL
pour indiquer au code du module qu'il est compilé comme un module dynamiquement
chargeable (le module de test ci-dessus effectue les tests pour cela; nous en
reparlerons prochainement). Après ces options, il spécifie un ensemble
de chemin d'inclusions qui doivent être utilisé comme liste minimum
de chemins.
Note: Tous les chemins d'inclusion de notre
exemple sont relatifs au dossier ext
. Si vous
compilez dans un autre dossier, changez les chemins de manière
adéquate. Les chemins nécessaires sont le dossier PHP, le
dossier Zend
, et (si nécessaire), le dossier
de votre module.
La commande de link est aussi une commande sur mesure pour linker le module
comme module dynamiquement chargeable.
Vous pouvez inclure les options d'optimisation dans la commande de compilation,
même si elles ont été omises dans notre exemple (mais certaines sont
inclues dans le makefile d'exemple, décrit plus tôt dans ce chapitre).
Note: Compiler et linker manuellement sous forme
de module dynamique dans un binaire PHP implique de très longues
insctructions, et ne sera pas décrit ici (ce n'est pas très efficace
de taper toutes ces commandes).
|