如何痛饮我的整个C ++代码库到Java(How to SWIG my entire c++ cod

2019-10-18 05:20发布

我已经使用痛饮做生成独立的类的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:没有什么知道关于基类的元素:: ILineAlgebra“。 忽略。 这些类是在同一位置列出的类的其余部分。 所以,我不知道什么是只有几个这些类的脚麻。

继续前进,我能得到_wrap.cxx但我编译它正在以下错误时。 错误C4430:缺少类型说明符 - 假定为int。 注意:C ++不支持默认int错误C2144:语法错误:“无效”前应先“;” 错误C2086: '诠释WINGDIAPI':重新定义C:\ Program Files文件(x86)的\微软的SDK \的Windows \ v7.0A \包括\ GL / gl.h(1152):看 'WINGDIAPI' 的声明。 。 。

还没有上市所有的人都在这里。 你能帮我找到办法解决这些错误。

Answer 1:

痛饮默认只处理由命名的顶级文件%include 。 它不递归到额外#include文件。 你必须明确%include头文件你想痛饮处理。

SWIG还并不知道什么STL,但也有一些痛饮头,可以增加对STL类型,如支持std::stringstd::vector 。 STL模板必须明确实例化,并给予目标语言名称:例如:

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

SWIG也不知道有关Windows类型和编译器扩展的,并且可以通过混淆__stdcall__cdecl__declspec(dllexport)DWORDUINT ,等等,但是这包括帮助:

%include <windows.i>


文章来源: How to SWIG my entire c++ code base to Java
标签: java swig