Problem mit der Funktionsneudefinition beim Erweitern von PHP mit C

WBOY
Freigeben: 2016-08-08 09:21:30
Original
1275 Leute haben es durchsucht

Problem: Wenn ich C++ zum Erweitern von PHP verwende, verwende ich einige mathematische Bibliotheksfunktionen wie sqr, sqrt usw. und muss in die Quelldatei test.cpp von C++ einfügen Erweiterungsprojekt, aber ich habe es beim Kompilieren gefunden. Diese Funktionen haben das Problem der Neudefinition.

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

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.

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