私はSWIG(Pythonをターゲットとして)でライブラリをラッピングしています。ライブラリ関数にはデータ型 "uint32_t"、 "uint8_t"などのパラメータが含まれています。可能な限りクロスプラットフォームとしてインターフェイスを作成したいので、私のinterface.i
ファイルに元の関数シグネチャを使用します。たとえば:SWIGとのクロスプラットフォームインターフェイスの生成方法は?
uint32_t func(uint32_t a, uint32_t b);
私が解決しようとしている問題はuint32_t
データ型にtypedef
がない限りSWIGは整数としてパラメータを認識しないということです。
typedef unsigned uint32_t;
typedef
ラインは、Pythonバインディングターゲットから呼び出し可能ではない機能を引き起こすことの削除:
>>> mylib.func(2, 2)
TypeError: in method 'func', argument 1 of type 'uint32_t'
以前typedef
OKにされた今、私は、インターフェイスファイルでこれを使用しています私のローカルマシンですが、別のコンパイラ/プラットフォームでは異なるかもしれません。ディレクティブを使用して%include "stdint.h"
はSWIGにエラーが発生します:
/usr/include/stdint.h:44: Error: Syntax error in input(1).
をWICHはSWIGは、フル機能のコンパイラではありませんので、理にかなって、完全にそのヘッダ上のすべての#ifdef
を評価することはできません。
コンパイラがstdint.h
ヘッダーで選択しているデータ型でSWIGを正しくフィードするにはどうすればよいですか?実際には、正確なデータ型を厳密に適用する意味がありますか、またはtypedef
すべてをintX_t
からlong
にすることはOKですか?