我用SWIG(Python作为目标)包装一个库.库函数包含数据类型为"uint32_t","uint8_t"等的参数.我想尽可能创建跨平台的接口,所以我想在我的interface.i文件中使用原始函数签名.例如:
uint32_t func(uint32_t a, uint32_t b);
Run Code Online (Sandbox Code Playgroud)
我试图解决的问题是,除非有一大口将无法识别该参数为整数typedef的uint32_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_t以long正常?
Fle*_*exo 12
如果要在SWIG界面文件中使用这些类型,可以执行以下操作:
%module test
%include "stdint.i"
uint32_t my_function();
Run Code Online (Sandbox Code Playgroud)
哪个现有SWIG接口具有typedef适合您系统的s.