1

我使用 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”声明。. .

这里没有列出所有这些。你能帮我找到解决这些错误的方法吗?

4

1 回答 1

1

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

SWIG 对 STL 也一无所知,但有一些 SWIG 标头可以添加对 STL 类型的支持,例如std::stringstd::vector。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>
于 2013-06-07T21:29:00.970 回答