Linux ( Ubuntu18.04 )环境: 正在做一个项目,打算把 C 代码做成.so 动态库,然后 python 通过 ctypes 连链接使用,但是在看教程( http://blog.sina.com.cn/s/blog_4513dde60100njs8.html )的时候遇到了问题。如下:
1.我的 c 文件,abc.c
#include <stdlib.h>
typedef struct{
int a;
int b;
}mystruct;
mystruct * create(){
mystruct * s = (mystruct *)calloc(1, sizeof(mystruct));
s->a = 100;
s->b = 200;
return s;
}
void destroy(mystruct * s){
free(s);
}
通过 gcc -fPIC --shared ./abc.c -o libabc.so 编译成.so 库
2.下面是我的 python 文件,abc.py
import ctypes as ct
class mystruct(ct.Structure):
__fields__=[('a',ct.c_int),('b',ct.c_int)]
lib = ct.cdll.LoadLibrary('./libabc.so')
lib.create.restype=ct.POINTER(mystruct)
p = lib.create()
p.contents.a
p.contents.b
3.同级目录下,利用$ python3 abc.py 运行,出现如下错误:
Traceback (most recent call last):
File "abc.py",line 11,in<modele>
p.contents.a
AttributeError: 'mystruct' object has no attribute 'a'
4.QUESTION:为啥我重现不了教程里面的源码呢?找了很多 CSDN 和 stack flow 方面的问题,但依然解决不了。望 V 友不吝赐教,万分感激!