我使用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'的声明 。 。
此处未列出所有这些内容。 你能帮我解决这些错误。
答案 0 :(得分:1)
默认情况下,SWIG仅处理由%include
命名的顶级文件。它不会递归到其他#include
文件中。您必须明确%include
希望SWIG处理的头文件。
SWIG也对STL一无所知,但有一些SWIG标头可以添加对std::string
和std::vector
等STL类型的支持。必须显式实例化STL模板并给出目标语言名称:示例:
%include <std_string.i>
%include <std_vector.i>
%template(IntVector) std::vector<int>;
SWIG也不了解Windows类型和编译器扩展,可能会被__stdcall
,__cdecl
,__declspec(dllexport)
,DWORD
,UINT
等混淆。,但这包括帮助:
%include <windows.i>