题
我想映射声明为在使用的ctypes库pbs_errno
全局int值libtorque.so
。
目前我可以加载库像这样:
from ctypes import *
libtorque = CDLL("libtorque.so")
和已经成功地映射一堆的功能。然而,对于错误检查的目的很多都设置pbs_errno
变量,所以我需要访问这一点。但是,如果我尝试访问它,我得到:
>>> pytorque.libtorque.pbs_errno
<_FuncPtr object at 0x9fc690>
当然,这不是一个函数指针,并试图调用它导致赛格故障。
它声明为在API头文件的主头和int pbs_errno;
extern int pbs_errno;
。
objdump显示符号为:
00000000001294f8 g DO .bss 0000000000000004 Base pbs_errno
解决方案
有一个在有关访问在DLL中导出值的ctypes的文档一个部分:
http://docs.python.org/库/ ctypes.html#访问值导出的从 - 的DLL
e.g。
def pbs_errno(): return c_int.in_dll(libtorque, "pbs_errno")
不隶属于 StackOverflow