[英]How to generate a cross platform interface with SWIG?
我用SWIG(Python作為目標)包裝一個庫。 庫函數包含數據類型為“uint32_t”,“uint8_t”等的參數。我想盡可能創建跨平台的接口,所以我想在interface.i
文件中使用原始函數簽名。 例如:
uint32_t func(uint32_t a, uint32_t b);
我試圖解決的問題是SWIG不會將參數識別為整數,除非uint32_t
數據類型上有typedef
。 現在我在接口文件上使用它:
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? 事實上確實是有意義的嚴格執行正確的數據類型,或者只是typedef
荷蘭國際集團所有intX_t
到long
是OK?
如果要在SWIG界面文件中使用這些類型,可以執行以下操作:
%module test
%include "stdint.i"
uint32_t my_function();
哪個現有SWIG接口具有適合您系統的typedef
。
你應該強制使用typedef,因為uint32_t不是跨平台而不是交叉編譯器。 uint32_t是C99標准,但許多編譯器決定不完全實現這個標准。 您可以使用include以交叉編譯器的方式重新定義項目類型:
http://www.azillionmonkeys.com/qed/pstdint.h
值得閱讀上面鏈接的標題的介紹。 您可以使用此include而不是stdint.h。
你也可以閱讀這個問題:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.