Ответ 1
В разделе ctypes содержится раздел о доступе к значениям, экспортированным в dll:
http://docs.python.org/library/ctypes.html#accessing-values-exported-from-dlls
например.
def pbs_errno(): return c_int.in_dll(libtorque, "pbs_errno")
Я хотел бы сопоставить значение int pbs_errno
, объявленное как глобальное в библиотеке libtorque.so
, используя ctypes.
В настоящее время я могу загрузить библиотеку следующим образом:
from ctypes import *
libtorque = CDLL("libtorque.so")
и успешно отобразили кучу функций. Однако для целей проверки ошибок многие из них устанавливают переменную pbs_errno
, поэтому мне также нужен доступ к ней. Однако, если я попытаюсь получить к нему доступ, я получаю:
>>> pytorque.libtorque.pbs_errno
<_FuncPtr object at 0x9fc690>
Конечно, это не указатель на функцию и попытка вызвать его, приводит к ошибке seg.
Он объявлен как int pbs_errno;
в главном заголовке и extern int pbs_errno;
в файлах заголовков API.
Objdump показывает символ как:
00000000001294f8 g DO .bss 0000000000000004 Base pbs_errno
В разделе ctypes содержится раздел о доступе к значениям, экспортированным в dll:
http://docs.python.org/library/ctypes.html#accessing-values-exported-from-dlls
например.
def pbs_errno(): return c_int.in_dll(libtorque, "pbs_errno")