Me gustaría asignar un valor int pbs_errno
declarado como global en la biblioteca libtorque.so
utilizando ctypes.Asignación de una variable global desde una biblioteca compartida con ctypes
Actualmente puedo cargar la biblioteca de este modo:
from ctypes import *
libtorque = CDLL("libtorque.so")
y ha identificado con éxito un montón de las funciones. Sin embargo, para el control de errores, muchos de ellos configuraron la variable pbs_errno
, así que también necesito acceder a ella. 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 el encabezado principal y extern int pbs_errno;
en los archivos de encabezado de API.
objdump muestra el símbolo como:
00000000001294f8 g DO .bss 0000000000000004 Base pbs_errno
La respuesta de John es correcta. Configurar el restype solo cambia el tipo de retorno de la función, AFAICT. Si realmente intenté llamar a pbs_errno como una función, resultó en una segfault. –