La cartographie d'une variable globale à partir d'une bibliothèque partagée avec ctypes

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

  •  23-08-2019
  •  | 
  •  

Question

Je voudrais mapper une valeur int pbs_errno déclarée comme globale dans la bibliothèque libtorque.so en utilisant ctypes.

À l'heure actuelle, je peux charger la bibliothèque comme ceci:

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

et dresser la carte avec succès un tas de fonctions. Toutefois, à des fins de vérification d'erreur beaucoup d'entre eux définissez la variable d'pbs_errno donc je besoin d'accéder à cela aussi. Toutefois, si je tente d'y accéder, je reçois:

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

Bien sûr, ce n'est pas un pointeur de fonction et d'essayer d'appeler il en résulte un défaut de seg.

Il est déclaré comme int pbs_errno; dans l'en-tête principal et extern int pbs_errno; dans les fichiers d'en-tête API.

objdump montre le symbole comme:

00000000001294f8 g    DO .bss   0000000000000004  Base        pbs_errno
Était-ce utile?

La solution

Il y a une section dans les ctypes docs sur l'accès aux valeurs exportées en dll:

http://docs.python.org/ bibliothèque / ctypes.html #-valeurs Accéder exportées-de-dll

par exemple.

def pbs_errno():
    return c_int.in_dll(libtorque, "pbs_errno")
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top