C++でphpを拡張するときの関数再定義redefinition問題
858 ワード
質問:私はC++でphpを拡張する時、いくつかの数学のライブラリの関数を使って、例えばsqr、sqrtなど、C++で工事のソースファイルtestを拡張する必要があります.cpp中#includeですが、コンパイル時にこれらの関数がredefinitionを再定義する問題が発生していることがわかりました.
何度も試してみるとtest.cpp冒頭の#include“php.h”を外すと、この問題はありません
原因:php.hでは、多くのC++ライブラリ関数をinlineに接続し、phpに直接定義.h,C++ライブラリ関数ファイルstdio.hにおける同名関数定義は再定義として認識される(inline修飾関数は他のファイルで定義できない)
解決:再定義関数のあるC++ヘッダファイル#includeを#include"phpに書く.h"以前は、test.cppのinline関数を遮断していました.
何度も試してみるとtest.cpp冒頭の#include“php.h”を外すと、この問題はありません
原因:php.hでは、多くのC++ライブラリ関数をinlineに接続し、phpに直接定義.h,C++ライブラリ関数ファイルstdio.hにおける同名関数定義は再定義として認識される(inline修飾関数は他のファイルで定義できない)
解決:再定義関数のあるC++ヘッダファイル#includeを#include"phpに書く.h"以前は、test.cppのinline関数を遮断していました.
#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"