簡體   English   中英

如何使用SWIG生成跨平台接口?

[英]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_tlong是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。

你也可以閱讀這個問題:

C ++中的跨平台原始數據類型

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM