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_tlong