Asignación de una variable global a partir de una biblioteca compartida con ctypes

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

  •  23-08-2019
  •  | 
  •  

Pregunta

Me gustaría asignar un valor int pbs_errno declarada como global en el libtorque.so biblioteca utilizando ctypes.

Actualmente puedo cargar la biblioteca de esta manera:

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

y se han asignado correctamente un montón de las funciones. Sin embargo, para fines de comprobación de errores que muchos de ellos establecer la variable pbs_errno así que necesito acceso a eso también. Sin embargo si intento acceder a ella consigo:

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

Por supuesto, no es un puntero de función e intentar llamar el resultado es una falla seg.

Se declara como int pbs_errno; en la cabecera principal y extern int pbs_errno; en los archivos de cabecera de la API.

objdump muestra el símbolo como:

00000000001294f8 g    DO .bss   0000000000000004  Base        pbs_errno
¿Fue útil?

Solución

Hay una sección en los documentos ctypes sobre cómo acceder a los valores exportados en dlls:

http://docs.python.org/ biblioteca / ctypes.html # valores de Acceso a-exportados-de-dlls

por ejemplo.

def pbs_errno():
    return c_int.in_dll(libtorque, "pbs_errno")
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top