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

vz0*_*vz0 7 c python swig gcc

我用SWIG(Python作为目标)包装一个库.库函数包含数据类型为"uint32_t","uint8_t"等的参数.我想尽可能创建跨平台的接口,所以我想在我的interface.i文件中使用原始函数签名.例如:

uint32_t func(uint32_t a, uint32_t b);
Run Code Online (Sandbox Code Playgroud)

我试图解决的问题是,除非有一大口将无法识别该参数为整数typedefuint32_t数据类型.现在我在接口文件上使用它:

typedef unsigned uint32_t;
Run Code Online (Sandbox Code Playgroud)

删除该typedef行将导致该函数无法从目标Python绑定中调用:

>>> mylib.func(2, 2)
TypeError: in method 'func', argument 1 of type 'uint32_t'
Run Code Online (Sandbox Code Playgroud)

以前typedef在我的本地机器上是可以的,但在另一个编译器/平台上可能有所不同.使用该指令%include "stdint.h"将在SWIG上引发错误:

/usr/include/stdint.h:44: Error: Syntax error in input(1).
Run Code Online (Sandbox Code Playgroud)

由于SWIG不是一个功能齐全的编译器,因此无法完全评估#ifdef该标头上的所有内容.

如何使用编译器在stdint.h标题上选择的数据类型正确地提供SWIG ?事实上确实是有意义的,严格执行正确的数据类型,或者只是typedef荷兰国际集团所有intX_tlong正常?

Fle*_*exo 12

如果要在SWIG界面文件中使用这些类型,可以执行以下操作:

%module test
%include "stdint.i"

uint32_t my_function();
Run Code Online (Sandbox Code Playgroud)

哪个现有SWIG接口具有typedef适合您系统的s.