我在使用 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
已经被声明了两次。我的意思是我有:
Abstract class Ccrypto {
....
}
和
class Ccrypto {
...
}
为什么 SWIG 会为我的班级生成两个声明?