9

我正在用 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?事实上,严格执行正确的数据类型是否有意义,或者只是typedefing 所有的intX_tlong可以?

4

1 回答 1

15

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

%module test
%include "stdint.i"

uint32_t my_function();

哪个是现有的 SWIG 界面具有typedef适合您系统的正确 s。

于 2012-05-07T09:12:46.333 回答