返回struct 32位linux时出现ctypes的Segfault

2024-03-29 07:17:01 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我从32位linux机器上的ctypes中得到一个segfault,我无法在64位达尔文或linux上复制。在

这是C:

typedef struct {
  void *ptr;
  } doodle;

doodle C_intpointerfunction(int *a)
{
  *a = 41;
  doodle foo;
  foo.ptr = a;
  return foo;
}

编译时使用:

^{pr2}$

这是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()

我得到了一个segfault。我尝试创建一个Python类来包装在C端创建的返回结构,该结构具有相同的结果。如果传回本机ctypes类型(如c\u int),则一切正常。。这真的只是32位Linux的问题,还是有什么我没有考虑过的?谢谢!在


Tags: importreturnfoolinuxctypesintprintshould