使用SWIG为C ++代码生成java包装器时遇到问题。我有一个使用多继承的C ++类。由于Java不支持它,我打算将一个基类包装为Java接口(因为它是C ++中的抽象类)。以下简单示例显示了我的C ++ header.h
的外观。
class Base1 {
public:
virtual void method1() = 0;
}
class Base2 {
public:
void metghod2();
}
class Derived : public Base1, public Base2{
public:
virtual void method1();
}
我的input.i
文件看起来像这样
%module wrap
%include <swiginterface.i>
%interface_impl(Base1);
%{
#include "header.h"
%}
%include "header.h"
SWIG文档说,在这种情况下,应该为类Base1生成两个Java包装器文件:Base1.java
(包含java接口)和Base1SwigImpl.java
(包含java代理类)。问题是SWIG只为我生成了第二个文件,并且没有java接口文件(Base1.java
)。还有一个SWIG警告:
警告813:派生代理的警告:Base Base1被忽略。 Java不支持多重继承。
问题只发生在ubuntu上。当我将它包装在Windows上时,一切正常。在Windows上,我在ubuntu SWIG 3.0.8上有SWIG 3.0.10
在ubuntu上安装SWIG后,没有swiginterface.i
文件,我收到错误,找不到此文件。但我将文件复制到所有.i
文件所在的位置,现在SWIG看到了它,但钢铁不能正常工作,正如我在上面解释的那样。
我使用命令从控制台运行swig:
swig -c++ -java -package pcg input.i
任何想法如何解决?
感谢任何帮助。