Zuordnen einer globalen Variablen in einer gemeinsam genutzten Bibliothek mit ctypes
Frage
Ich möchte einen int-Wert pbs_errno
als global in der Bibliothek libtorque.so
mit ctypes erklärt abzubilden.
Zur Zeit kann ich die Bibliothek laden etwa so:
from ctypes import *
libtorque = CDLL("libtorque.so")
und hat erfolgreich eine Reihe von Funktionen abgebildet. Doch für Fehler Prüfzwecken viele von ihnen die pbs_errno
Variable gesetzt, damit ich Zugriff auf das auch brauchen. Allerdings, wenn ich versuche, darauf zuzugreifen, erhalte ich:
>>> pytorque.libtorque.pbs_errno
<_FuncPtr object at 0x9fc690>
Natürlich ist es nicht ein Funktionszeiger und versucht, sie in einem seg Fehler führen zu nennen.
Es ist, als int pbs_errno;
im Haupt-Header und extern int pbs_errno;
in den API-Header-Dateien deklariert.
objdump zeigt das Symbol wie:
00000000001294f8 g DO .bss 0000000000000004 Base pbs_errno
Lösung
Es gibt einen Abschnitt in der ctypes docs über Werte exportierten in DLLs zugreifen:
http://docs.python.org/ Bibliothek / ctypes.html # zugreifenden-Werte-Export-from-dlls
z.
def pbs_errno(): return c_int.in_dll(libtorque, "pbs_errno")