我正在用 SWIG(Python 作为目标)包装一个库。库函数包含数据类型为“uint32_t”、“uint8_t”等的参数。我想创建尽可能跨平台的接口,所以我想在我的interface.i
文件中使用原始函数签名。例如:
uint32_t func(uint32_t a, uint32_t b);
我要解决的问题是 SWIG 不会将参数识别为整数,除非数据类型typedef
上有 a uint32_t
。现在我在接口文件上使用它:
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).
Wich 是有道理的,因为 SWIG 不是功能齐全的编译器,并且无法完全评估#ifdef
该标头上的所有内容。
如何正确使用编译器在stdint.h
标头上选择的数据类型提供 SWIG?事实上,严格执行正确的数据类型是否有意义,或者只是typedef
ing 所有的intX_t
都long
可以?