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 友不吝赐教,万分感激!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.