gpt4 book ai didi

python - 如何使用 SWIG 生成跨平台界面?

转载 作者:太空狗 更新时间:2023-10-29 21:29:45 24 4
gpt4 key购买 nike

我正在用 SWIG(以 Python 为目标)包装一个库。库函数包含数据类型为“uint32_t”、“uint8_t”等的参数。我想创建尽可能跨平台的接口(interface),所以我想在我的 interface.i 文件。例如:

uint32_t func(uint32_t a, uint32_t b);

我要解决的问题是 SWIG 不会将参数识别为整数,除非 uint32_t 数据类型上有 typedef。现在我在接口(interface)文件上使用它:

typedef unsigned uint32_t;

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

>>> 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 不是功能齐全的编译器,并且无法完全评估该 header 上的所有 #ifdef

我如何才能正确地将编译器在 stdint.h header 上选择的数据类型提供给 SWIG?严格执行正确的数据类型是否有意义,或者只是 typedef 将所有 intX_t 转换为 long 就可以了?

最佳答案

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

%module test
%include "stdint.i"

uint32_t my_function();

现有的 SWIG 接口(interface)具有适用于您的系统的正确 typedef

关于python - 如何使用 SWIG 生成跨平台界面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10476483/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com