如何将我的整个c ++代码库转换为Java

时间:2013-06-07 09:01:42

标签: java swig

我使用swig为独立类生成java绑定。但是,当我尝试为我现有的代码库做这件事时,这个代码库非常复杂,需要调用STL,OSG和OpenGL。当我试图摆弄它时,它会遇到问题。 这是我的.i文件

/* File : Line.i */
%module Line

%{
#include "Elements/LineFeatureObject.h"
%}

/* Let's just grab the original header file here */
%include "Elements/LineFeatureObject.h

此标头包含其他几个标头文件。其中一些是由代码读取的,而对于某些人,它给出了以下警告。 警告401:基类'ELEMENTS :: ILineAlgebra'没有任何已知信息。忽略。 这些类与其余类列在同一位置。所以我不确定这些类中的几个会出现什么问题。

继续我能够获得_wrap.cxx但是在编译它时会出现以下错误。 错误C4430:缺少类型说明符 - 假定为int。注意:C ++不支持default-int 错误C2144:语法错误:'void'前面应加';' 错误C2086:'int WINGDIAPI':重新定义       C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ include \ GL / gl.h(1152):参见'WINGDIAPI'的声明 。 。

此处未列出所有这些内容。 你能帮我解决这些错误。

1 个答案:

答案 0 :(得分:1)

默认情况下,SWIG仅处理由%include命名的顶级文件。它不会递归到其他#include文件中。您必须明确%include希望SWIG处理的头文件。

SWIG也对STL一无所知,但有一些SWIG标头可以添加对std::stringstd::vector等STL类型的支持。必须显式实例化STL模板并给出目标语言名称:示例:

%include <std_string.i>
%include <std_vector.i>
%template(IntVector) std::vector<int>;

SWIG也不了解Windows类型和编译器扩展,可能会被__stdcall__cdecl__declspec(dllexport)DWORDUINT等混淆。,但这包括帮助:

%include <windows.i>