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

WBOY
リリース: 2016-08-08 09:21:30
オリジナル
1250 人が閲覧しました

質問: 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 チュートリアルに興味のある友人に役立つことを願っています。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!