SWIG を使用して、ソースを管理していないライブラリ用の python インターフェイス モジュールを生成しようとしています。ライブラリには、何らかの理由で次の行があります。
#define VOID void
これは、SWIG であらゆる種類の問題を引き起こしています。VOID は、これらの関数が返す実際のオブジェクトであると考えているようです。
SWIGにそのVOID
意味を伝える方法はありますvoid
か?
SWIG インターフェイス ファイルを作成したとき、関数プロトタイプを逐語的にコピーしましたVOID
。インターフェイス ファイルのすべてのプロトタイプを using から using に変更するVOID
とvoid
、問題は解決しました。
SWIG はプリプロセッサを尊重しているように見えますが、それ自体のインターフェイス ファイルではなく、理解できるものです。
将来の検索者のためにこれをここに投稿します...
ちょっと待ってください... ライブラリのソースがない場合は、#define VOID void
このライブラリを使用するためにインクルードしているヘッダー (.H) ファイルで発生することを意味していると思います。ライブラリが既にコンパイルされている場合、 はライブラリに#define VOID void
影響を与えず、それらのヘッダーにのみ関連します。ディレクティブは#define
、コードをコンパイルするプリプロセッサにのみ影響します (ライブラリは既にビルドされています)。したがって、これらのヘッダーのみが VOID を使用している場合は、それらのヘッダー#define VOID void
の上部に があり #undef VOID
、下部に があり、VOID マクロを削除するようにしてください。