ホームページ >バックエンド開発 >PHPチュートリアル >PHP を C++ で拡張する際の関数の再定義に関する問題

PHP を C++ で拡張する際の関数の再定義に関する問題

WBOY
WBOYオリジナル
2016-08-08 09:21:301284ブラウズ

質問: C++ を使用して php を拡張したとき、sqr、sqrt などの数学ライブラリ関数を使用しました。C++ 拡張プロジェクトのソース ファイル test.cpp に を #include する必要があります。これらの関数はコンパイル中に見つかりました。再定義の問題があります。

何度も試した結果、test.cpp の先頭にある #include "php.h" を削除すると、この問題がなくなることがわかりました

理由: クエリから、php.h には多くの C++ ライブラリ関数が含まれています。 php.h で直接定義されているため、C++ ライブラリ関数ファイル stdio.h 内の同じ名前の関数定義が再定義として認識されます (インライン変更された関数を他のファイルで定義することはできません)

解決策: C++ ヘッダー ファイル #include は、インライン関数をブロックするために #include "php.h" の前に記述されます。test.cpp 内のその場所は次のとおりです。

#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"

元の記事はブロガーによって作成されたものであり、ブロガーによって公開されていません。所有者の許可を得て転載することはできません。

上記では、PHP を C++ で拡張する際の関数の再定義の問題を、関連する側面も含めて紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。