python ctype字符串指针32b vs 64b:分段错误(核心转储)

2024-09-29 17:23:33 发布

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

我有一个共享库,其中包含以下功能:

char * LibVers()
{
    return " LibVers 2.03";
}

我正在使用ctypes包装所述共享库,并具有如下定义的属性:

^{pr2}$

在32b机器(Fedora16)上,这个代码可以正常工作。但是,在64b机器(CentOS 7)上,此代码分段错误(核心转储)。在

为什么会这样?在


Tags: 代码功能机器核心return属性定义错误
1条回答
网友
1楼 · 发布于 2024-09-29 17:23:33

ctypes模块假定返回类型是c\u int。如果不是,则必须自己提供返回类型并进行一些转换。大多数情况下,在32位上,这是正常的,但是在64位上,您会丢失指针的某些部分,从而使其无效。我将代码改为下面的代码,现在它按预期工作。在

@property
def lib_vers(self):
    """Get shared library version information.

    :return: The shared library version string.
    :rtype: String
    """
    if self.lib.LibVers.argtypes is None:
        self.lib.LibVers.restype = c_char_p
        self.lib.LibVers.argtypes = []
    return self.lib.LibVers()

相关问题 更多 >

    热门问题