swigを使用してPHPでc++クラスをラップする際に問題があります。私のクラスはヘッダーファイルで次のように宣言されています。
#include <string.h>
using namespace std;
class Ccrypto
{
int retVal;
public:
int verify(string data, string pemSign, string pemCert);
long checkCert(string inCert, string issuerCert, string inCRL);
int verifyChain(string inCert, string inChainPath);
int getCN(string inCert, string &outCN);
};
これらの各メソッドは、いくつかの関数で構成されています。
私のインターフェースファイルは以下の通りです:
%module Ccrypto
%include <std_string.i>
%include "Ccrypto.h"
%include "PKI_APICommon.h"
%include "PKI_Certificate.h"
%include "PKI_Convert.h"
%include "PKI_CRL.h"
%include "PKI_TrustChain.h"
%{
#include "Ccrypto.h"
#include "PKI_APICommon.h"
#include "PKI_Certificate.h"
#include "PKI_Convert.h"
#include "PKI_CRL.h"
#include "PKI_TrustChain.h"
%}
エラーなしでCcrypto.soファイルを生成します。しかし、コード内でこのクラスを使用すると、次のエラーが発生します。
Fatal error: Cannot redeclare class Ccrypto in /path/to/my/.php file
Ccrypto.phpファイルを確認したところ、class Ccrypto
2回宣言されていることがわかりました。私が持っていることを意味します:
Abstract class Ccrypto {
....
}
と
class Ccrypto {
...
}
SWIGがクラスに対して2つの宣言を生成するのはなぜですか?