由于 SWIG 无法解析__attribute__((packed))
在我想要包装的一些 C 结构上,我通过放置一个来解决这个问题
#define __attribute__(x)
in my .i
file.
这东西什么时候才会来咬我?
这实际上是完全理智的。 SWIG 不需要了解有关布局的任何信息struct
您正在包装以便能够生成正确的代码。 (它甚至不需要知道它们包含的所有成员)。
原因是生成的代码很大程度上只是编组数据。在 C 中你可以合法地写:
void show_a(const struct foo *instance) {
printf("%s", instance->b);
}
不管是否foo
被定义为:
struct foo {
double a;
char *b;
}
or
struct foo {
char *b;
double a,c;
int xyz;
}
打包/对齐唯一重要的地方是创建新结构时。不过,只要您不向 C 编译器本身隐藏该属性,这也是正确处理的,因为生成的 C 包装器代码将使用真正的定义,而不是您在接口文件中显示的伪定义。
它有点笨拙,但是您可以通过阅读生成的包装器来说服自己相信这一点。
一般的答案是,您可以对 SWIG 本身撒很多谎,当 C 编译器看到生成的代码并将其与真实的定义/声明相协调时,最终一切都会顺利进行。
在具体情况下,简短的答案是:只要你只把它#define
在 .i 文件中,然后仅在它不会传递到生成的 module_wrap.c 的地方,就可以了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)