Problem: Wenn ich C++ zum Erweitern von PHP verwende, verwende ich einige mathematische Bibliotheksfunktionen wie sqr, sqrt usw. und muss
Nach vielen Versuchen habe ich festgestellt, dass dieses Problem verschwindet, wenn #include „php.h“ am Anfang von test.cpp entfernt wird.
Ursache: Die Abfrage hat das gefunden, weil php.h Viele C++-Bibliotheksfunktionen sind inline und direkt in php.h definiert, was dazu führt, dass die gleichnamige Funktionsdefinition in der C++-Bibliotheksfunktionsdatei stdio.h als Neudefinition erkannt wird (inline-modifizierte Funktionen dürfen nicht in definiert werden). andere Dateien)
Lösung: Schreiben Sie das #include der C++-Header-Datei mit neu definierten Funktionen vor #include „php.h“, um die Inline-Funktion zu blockieren. Der Speicherort in test.cpp ist wie folgt:
#ifdef HAVE_CONFIG_H #include "config.h" #endif <strong>#include <stdio.h> #include <string.h> #include <math.h> #include <map> #include <vector> #include <set> #include <queue></strong> #include "php.h" #include "php_ini.h" #include "ext/standard/info.h" #include "php_NearestNeighbors.h"
Urheberrechtserklärung: Dieser Artikel ist ein Originalartikel des Bloggers und darf nicht ohne die Erlaubnis des Bloggers reproduziert werden.
Das Obige hat das Problem der Funktionsneudefinition bei der Erweiterung von PHP mit C eingeführt, einschließlich der relevanten Aspekte. Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.