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