Utilisez php pour appeler le code dans le fichier de bibliothèque so

不言
Libérer: 2023-03-23 11:06:02
original
7256 Les gens l'ont consulté

Le contenu de cet article est d'utiliser PHP pour appeler le code dans le fichier de la bibliothèque so. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer

Une certaine fonction est compilée dans le fichier so, alors comment l'appeler via php ? Une méthode consiste à

écrire un module php (extension php), à appeler la fonction dans le module en php, puis à utiliser le module pour appeler la fonction dans donc . Voici un exemple simple utilisant Fedora Core 6 comme système d'exploitation.

Créez d'abord un fichier so simple :

1  /**
 2   * hello.c
 3   * To compile, use following commands:
 4   *   gcc -O -c -fPIC -o hello.o hello.c 
 5   *   gcc -shared -o libhello.so hello.o
 6   */
 7  
 8  int hello_add(int a, int b)
 9  {
10      return a + b;
11  }
Copier après la connexion
Ensuite, compilez-le dans un fichier .so et mettez-le dans le système :

1 ___FCKpd___1nbsp;gcc -O -c -fPIC -o hello.o hello.c
2 ___FCKpd___1nbsp;gcc -shared -o libhello.so hello.o
3 ___FCKpd___1nbsp;su
4 # echo /usr/local/lib > /etc/ld.so.conf.d/local.conf
5 # cp libhello.so /usr/local/lib
6 # /sbin/ldconfig
Copier après la connexion
Écrivez un petit programme pour vérifier son exactitude :

 1/**
 2  * hellotest.c
 3  * To compile, use following commands:
 4  *   gcc -o hellotest -lhello hellotest.c
 5  */
 6 #include <stdio.h>
 7 int main()
 8 {
 9     int a = 3, b = 4;
10     printf("%d + %d = %d/n", a, b, hello_add(a,b));
11     return 0;
12 }
Copier après la connexion
Compilez et exécutez :

 $ gcc -o hellotest -lhello hellotest.c
$ ./hellotest
3 + 4 = 7
Copier après la connexion
OK, créons le module PHP. Tout d’abord, assurez-vous d’avoir installé le package php-devel. Sinon, veuillez le trouver sur le CD d’installation. Téléchargez ensuite le code source php. J'utilise php-5.2.3.tar.gz, décompressé.

 $ tar xzvf php-5.2.3.tar.gz
$ cd php-5.2.3/ext
Copier après la connexion
Créez ensuite un module nommé bonjour via la commande suivante.

 $ ./ext_skel --extname=hello
Copier après la connexion
Après avoir exécuté cette commande, il vous demandera quelle commande doit être utilisée pour compiler le module. Malheureusement, c'est la méthode de compilation qui intègre le module dans PHP. Si vous souhaitez le compiler dans un php_hello.so chargeable dynamiquement, la méthode est plus simple.

 $ cd hello
Copier après la connexion
Modifiez d'abord le fichier config.m4 et supprimez les commentaires sur les lignes 16 et 18 (le symbole du commentaire est dnl.)

1 16:  PHP_ARG_ENABLE(hello, whether to enable hello support,
2 17:  dnl Make sure that the comment is aligned:
3 18:  [  --enable-hello           Enable hello support])
Copier après la connexion
Ensuite, exécutez le programme phpize pour générer le configurer le script :

 $ phpize
Copier après la connexion
Puis ouvrez php_hello.h, ajoutez la déclaration de fonction sous PHP_FUNCTION(confirm_hello_compiled);:

1PHP_FUNCTION(confirm_hello_compiled);   /* For testing, remove later. */
2 PHP_FUNCTION(hello_add);
Copier après la connexion
Ouvrez hello.c, sous PHP_FE(confirm_hello_compiled, NULL) Ajouter ce qui suit.

<br/>
Copier après la connexion
Écrivez ensuite le contenu de la fonction hello_add à la fin de hello.c :

 1PHP_FUNCTION(hello_add)
 2 {
 3     long int a, b;
 4     long int result;
 5 
 6     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &a, &b) == FAILURE) {
 7         return;
 8     }
 9 
10     result = hello_add(a, b);
11 
12     RETURN_LONG(result);
13 }
Copier après la connexion
Enregistrez et quittez, compilez et installez :

___FCKpd___12nbsp;./configure
 ___FCKpd___12nbsp;make LDFLAGS=-lhello
 ___FCKpd___12nbsp;su
 # cp modules/hello.so /usr/lib/php/modules
Copier après la connexion
Puis dans Créez un fichier hello.php sous /var/www/html avec le contenu suivant :

 <?php
dl("hello.so");
echo hello_add(3, 4);
?>
Copier après la connexion
Ouvrez ensuite le fichier hello.php dans le navigateur Si 7 est affiché, l'appel de fonction est réussi. .


Supplément de connaissances Linux :

En raison de l'utilisation d'Editplus, le programme source par défaut du langage C est enregistré au format .cpp, puis je le compile avec gcc sous cygwin, et certaines fonctions apparaissent toujours non déclarées, mais ces fonctions sont toutes des appels système standard. Pourquoi ?


J'ai été déprimé par ce problème tout l'après-midi et la nuit. Ensuite, je ne savais pas pourquoi on m'avait demandé d'essayer de changer le programme source .cpp en .c, et. la compilation s'est déroulée sans problème.

Plus tard, j'ai appris sur Internet que sous Linux, gcc est utilisé pour compiler les fichiers .c, tandis que les fichiers c++ nécessitent la commande g++ pour compiler le programme source c++.

Recommandations associées :

Utilisez PHP pour obtenir l'adresse IP des visiteurs, l'emplacement régional, le navigateur et les informations sur la page source

PHP utilise PHPstorm Explication détaillée de la fonction d'invite automatique

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!