Ich möchte einen Int-Wert pbs_errno
als eine globale in der Bibliothek libtorque.so
mit Ctypes deklariert.Mapping einer globalen Variablen aus einer gemeinsam genutzten Bibliothek mit Ctypes
Zur Zeit kann ich die Bibliothek wie so laden:
from ctypes import *
libtorque = CDLL("libtorque.so")
und haben erfolgreich eine Reihe von Funktionen abgebildet. Zur Fehlerüberprüfung setzen viele von ihnen jedoch die pbs_errno
Variable, so dass ich auch darauf zugreifen muss. 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 Hauptheader und extern int pbs_errno;
in den API-Header-Dateien deklariert.
objdump zeigt das Symbol als:
00000000001294f8 g DO .bss 0000000000000004 Base pbs_errno
Johns Antwort ist korrekt. Das Festlegen des Resttyps ändert nur den Rückgabetyp der Funktion AFAICT. Wenn ich tatsächlich pbs_errno als Funktion aufrufen wollte, führte dies zu einem segfault. –