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追加のファイルに再帰しません。%includeSWIG に処理させたいヘッダー ファイルを明示的に指定する必要があります。

SWIG も STL について何も知りませんが、 や などの STL タイプのサポートを追加できる SWIG ヘッダーがいくつかstd::stringありstd::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>
于 2013-06-07T21:29:00.970 に答える