Verwenden Sie PHP, um den Code in der SO-Bibliotheksdatei aufzurufen

不言
Freigeben: 2023-03-23 11:06:02
Original
7363 Leute haben es durchsucht

Der Inhalt dieses Artikels besteht darin, PHP zum Aufrufen des Codes in der SO-Bibliotheksdatei zu verwenden. Er hat einen gewissen Referenzwert.

Eine bestimmte Funktion wird in die SO-Datei kompiliert. Wie rufe ich sie also über PHP auf? Eine Methode besteht darin, ein PHP-Modul (PHP-Erweiterung) zu schreiben, die Funktion im Modul in PHP aufzurufen, und dann das Modul zum Aufrufen der Funktion zu verwenden also . Hier ist ein einfaches Beispiel mit Fedora Core 6 als Betriebssystem.

Erstellen Sie zunächst eine einfache SO-Datei:

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  }
Nach dem Login kopieren

Kompilieren Sie sie dann in eine .so-Datei und legen Sie sie im System ab:

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
Nach dem Login kopieren

Schreiben Sie ein kleines Programm, um seine Richtigkeit zu überprüfen:

 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 }
Nach dem Login kopieren

Kompilieren und ausführen:

 $ gcc -o hellotest -lhello hellotest.c
$ ./hellotest
3 + 4 = 7
Nach dem Login kopieren

OK, erstellen wir das PHP-Modul. Stellen Sie zunächst sicher, dass Sie das Paket php-devel installiert haben. Andernfalls finden Sie es auf der Installations-CD. Laden Sie dann den PHP-Quellcode herunter. Ich verwende php-5.2.3.tar.gz, dekomprimiert.

 $ tar xzvf php-5.2.3.tar.gz
$ cd php-5.2.3/ext
Nach dem Login kopieren

Erstellen Sie dann mit dem folgenden Befehl ein Modul mit dem Namen „hello“.

 $ ./ext_skel --extname=hello
Nach dem Login kopieren

Nach der Ausführung dieses Befehls werden Sie gefragt, welcher Befehl zum Kompilieren des Moduls verwendet werden soll. Leider ist dies die Kompilierungsmethode, die das Modul in PHP integriert. Wenn Sie es in eine dynamisch ladbare php_hello.so kompilieren möchten, ist die Methode einfacher.

 $ cd hello
Nach dem Login kopieren

Bearbeiten Sie zuerst die Datei config.m4 und entfernen Sie die Kommentare in den Zeilen 16 und 18 (das Kommentarsymbol ist 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])
Nach dem Login kopieren

Führen Sie dann das PHPize-Programm aus, um das zu generieren Skript konfigurieren:

 $ phpize
Nach dem Login kopieren

Dann php_hello.h öffnen, Funktionsdeklaration unter PHP_FUNCTION(confirm_hello_compiled) hinzufügen;:

1PHP_FUNCTION(confirm_hello_compiled);   /* For testing, remove later. */
2 PHP_FUNCTION(hello_add);
Nach dem Login kopieren

Hallo.c öffnen, unter PHP_FE(confirm_hello_compiled, NULL) hinzufügen die folgende.

<br/>
Nach dem Login kopieren

Dann schreiben Sie den Inhalt der hello_add-Funktion am Ende von 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 }
Nach dem Login kopieren

Speichern und beenden, kompilieren und installieren:

___FCKpd___12nbsp;./configure
 ___FCKpd___12nbsp;make LDFLAGS=-lhello
 ___FCKpd___12nbsp;su
 # cp modules/hello.so /usr/lib/php/modules
Nach dem Login kopieren

Dann erstellen Sie eine hello.php-Datei unter /var/www/html mit folgendem Inhalt:

 <?php
dl("hello.so");
echo hello_add(3, 4);
?>
Nach dem Login kopieren

Öffnen Sie dann die hello.php-Datei im Browser. Wenn 7 angezeigt wird, ist der Funktionsaufruf erfolgreich .

Linux-Wissensergänzung:

Aufgrund der Verwendung von Editplus wird das Standardquellprogramm der C-Sprache als .cpp gespeichert und ich kompiliere es dann mit gcc unter Cygwin. Einige Funktionen werden immer nicht deklariert angezeigt. Aber diese Funktionen sind alles Standardsystemaufrufe.


Ich war den ganzen Nachmittag und die ganze Nacht über deprimiert. Dann wusste ich nicht, warum ich versucht habe, das Quellprogramm .cpp in .c zu ändern die Zusammenstellung verlief reibungslos.

Später erfuhr ich im Internet, dass unter Linux gcc zum Kompilieren von .c-Dateien verwendet wird, während für C++-Dateien der Befehl g++ zum Kompilieren des C++-Quellprogramms erforderlich ist.

Verwandte Empfehlungen:

Verwenden Sie PHP, um Besucher-IP, regionalen Standort, Browser und Quellseiteninformationen zu erhalten

PHP verwendet PHPstorm Detaillierte Erklärung der automatischen Aufforderungsfunktion

Das obige ist der detaillierte Inhalt vonVerwenden Sie PHP, um den Code in der SO-Bibliotheksdatei aufzurufen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage