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 友不吝赐教,万分感激!
1
gwy15 2020-10-23 16:16:41 +08:00 2
_fields_,一个下划线,你打成了两个
|
2
gwy15 2020-10-23 16:17:35 +08:00
写 python 不买游标卡尺的吗 XD
|
3
silencht OP @gwy15 真的太谢谢你了!我一下午一头雾水。。。。用 python 没多久,被__main__两个下划线带跑偏了。真的是太感谢你了!(是时候考虑一下买一个游标卡尺了,人生苦短,我用游标卡尺..............
|
4
silencht OP @gwy15 我还有一个问题想向您请教,您是如何看出两个下划线出现问题的呢?这个问题还可以再学一下 python 的哪些知识点加深理解?(祝您每天开心:)
|
5
Huelse 2020-10-23 16:38:58 +08:00 2
程序员字体可以帮你看出来,稍微大点的库用 pybind11 来打包会更好用
|