我已经创建了一个C ++类,我希望能够从Java构造和调用方法。
这是(在名为test_swig_cpp_java.h的文件中):
#ifndef TEST_SWIG_CPP_JAVA_H_
#define TEST_SWIG_CPP_JAVA_H_
class GoOnJavaConstructMe {
public:
void oohComeOnCallMeYouKnowYouWantTo();
};
#endif
然后我为SWIG创建了一个模块文件(名为test_swig_module.i)并将其放入其中:
%module Test;
%ignore "";
%rename("%s") GoOnJavaConstructMe;
%rename("%s") GoOnJavaConstructMe::oohComeOnCallMeYouKnowYouWantTo;
%{
#include "test_swig_cpp_java.h"
%}
%include "test_swig_cpp_java.h"
我运行以下命令让SWIG执行其操作:
swig -c++ -java test_swig_module.i
并列出了我在目录中的文件,这些文件不是我创建的文件 - 这是列表:
GoOnJavaConstructMe.java
Test.java
TestJNI.java
test_swig_module_wrap.cxx
很好,所以我有一个cxx(test_swig_module_wrap.cxx
)文件,我需要用我的C ++代码编译,在Java端,我想要调用的类已经很好地创建了(GoOnJavaConstructMe.java
)我可以看到一些JNI声明(TestJNI.java
),我还需要使用我的Java gubbins编译。
到目前为止似乎没问题但是Test.java
我想知道......当我打开它时,它看起来像这样:
/* ----------------------------------------------------------------------------
* This file was automatically generated by SWIG (http://www.swig.org).
* Version 3.0.2
*
* Do not make changes to this file unless you know what you are doing--modify
* the SWIG interface file instead.
* ----------------------------------------------------------------------------- */
public class Test {
}
一个与SWIG模块同名的空类,很有趣......所以我做了一些research,我发现这被称为模块类,它是一个地方放置全局函数的地方。
是的,公平,我想他们必须去某个地方然后我想,事情是,我将永远不会有任何全局函数,因为我非常具体,我想只公开一个类和方法到Java。
我可以在我的构建过程中添加一个步骤,当我运行SWIG后删除此文件,当然,但我不知道......
是否可以停止SWIG为Java生成模块类?
(据我所知,这似乎不是command line option所以我认为答案可能不是,但也许大师们知道一个聪明的把戏也许在模块文件中)