Сопоставление глобальной переменной из общей библиотеки с помощью ctypes

StackOverflow https://stackoverflow.com/questions/544173

  •  23-08-2019
  •  | 
  •  

Вопрос

Я хотел бы сопоставить значение int pbs_errno объявлен как глобальный в библиотеке libtorque.so используя ctypes.

В настоящее время я могу загрузить библиотеку следующим образом:

from ctypes import *
libtorque = CDLL("libtorque.so")

и успешно сопоставили кучу функций.Однако в целях проверки ошибок многие из них устанавливают pbs_errno переменная, поэтому мне тоже нужен доступ к ней.Однако, если я попытаюсь получить к нему доступ, я получу:

>>> pytorque.libtorque.pbs_errno
<_FuncPtr object at 0x9fc690>

Конечно, это не указатель на функцию, и попытка вызвать его приводит к ошибке сегмента.

Это объявлено как 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")
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top