gpt4 book ai didi

python - 使用 SWIG 在 Python 和 C 之间传递结构

转载 作者:行者123 更新时间:2023-11-30 15:23:15 26 4
gpt4 key购买 nike

我正在尝试使用 SWIG 在 C 和 Python 之间传递结构。我对 Python 和 C 完全陌生。我搜索了使用 SWIG 传递结构,但没有成功。

我的代码基于 SWIG Python tutorial 中的示例,第 55 和 56 页。它应该从 Python 获取输入值,在 C 中将它们乘以 2,然后将结果返回给 Python。我收到错误AttributeError:'module'对象没有属性'new_info

样本.c

#include <stdio.h>
#include "sample.h"

struct info sample;

void getstruct (struct info *sample);

void getstruct (struct info *sample) {

int i = 0;
int j = 0;
int k = 0;
int l = 0;

i = 2 * sample->i;
j = 2 * sample->j;
k = 2 * sample->k;
l = 2 * sample->l;

sample->i = i;
sample->j = j;
sample->k = k;
sample->l = l;

return(&sample);

}

样本.i

%module sample
%{
typedef struct
{
int i;
int j;
int k;
int l;
} info;

extern void getstruct (struct info *sample);

info *new_info(int i, int j, int k, int l) {
info *in = (info *) malloc(sizeof(info));
in->i = i;
in->j = j;
in->k = k;
in->l = l;
return in;
}

void delete_info(info *in) {
free(in);
}
%}

extern void getstruct (struct info *sample);
typedef struct
{
int i;
int j;
int k;
int l;
} info;

构建包装器所执行的命令:

swig -python sample.i
gcc -fPIC -c sample.c sample_wrap.c -I/usr/include/python2.7
ld -shared sample.o sample_wrap.o -o _sample.so

Python 错误:

[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sample
>>>
>>> print sample
<module 'sample' from 'sample.pyc'>
>>> print sample.getstruct(1,2,3,4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: getstruct() takes exactly 1 argument (4 given)
>>> v = new_info(1,2,3,4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'new_info' is not defined
>>> v = sample.new_info(1,2,3,4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'new_info'
>>>

最佳答案

sample.i 文件中,您已将 new_infodelete_info 函数直接添加到包装器代码中,方法是在 %{%},但没有告诉 SWIG 为这些函数生成包装器。在 %{/%} 之外再次重复该代码,或使用 %inline %{/%} 。后者将代码直接添加到包装器中,并告诉 SWIG 对其进行包装。

关于python - 使用 SWIG 在 Python 和 C 之间传递结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28886614/

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