, поэтому я получаю segfault от ctypes на 32-битной машине linux, которую не могу воспроизвести на 64-битной darwin или linux.
Вот C:
typedef struct {
void *ptr;
} doodle;
doodle C_intpointerfunction(int *a)
{
*a = 41;
doodle foo;
foo.ptr = a;
return foo;
}
который скомпилирован с:
gcc -c intpointerlibrary.c
gcc -shared intpointerlibrary.o -o libintpointerlib.so
и вот Python:
import numpy as N
from ctypes import *
_libintpointer = N.ctypeslib.load_library('libintpointerlib.so','.')
_libintpointer.C_intpointerfunction.restype = c_void_p
_libintpointer.C_intpointerfunction.argtypes = [POINTER(c_int)]
def P_intpointerfunction():
lrc = c_int(0)
print "lrc before (should be 0) = "+str(lrc.value)
return_val = _libintpointer.C_intpointerfunction(byref(lrc))
print "lrc after (should be 41) = "+str(lrc.value)
return return_val
так что теперь, когда я вызываю эту функцию:
rc = P_intpointerfunction()
я получаювыдаёт ошибку сегментации.Я попытался создать класс Python, чтобы обернуть возвращенную структуру, созданную на стороне C, с теми же результатами.Если возвращать нативный тип ctypes (например, c_int), все работает нормально .. Это действительно просто проблема с 32-битным Linux, или я что-то не учел?Спасибо!