基于Python版本生成SWIG代码

时间:2016-04-20 17:05:15

标签: python swig

如果我正在为Python 3进行编译,我有一些使用PyInt需要使用PyInt的字体图。我尝试这样做:

#if PY_VERSION_HEX >= 0x03000000
%typemap(in) ssize_t {
    $1 = PyLong_AsSsize_t($input);
}
#else
%typemap(in) ssize_t {
    $1 = PyInt_AsSsize_t($input);
}
#endif

(在此示例中,ssize_t是类型定义的整数类型。)

然而,这需要第二个分支,然后抱怨没有定义PyInt(因为Python 2中不存在PyInt)。

1 个答案:

答案 0 :(得分:2)

PY_VERSION_HEX仅在编译代码(包括python头)时定义,但在SWIG解析代码时不定义。您可以改用以下内容:

%typemap(in) ssize_t {
%#if PY_VERSION_HEX >= 0x03000000
    $1 = PyLong_AsSsize_t($input);
%#else
    $1 = PyInt_AsSsize_t($input);
%#endif
}
编辑:抱歉,需要解决问题。 %#...语法告诉SWIG预处理器逐字复制代码。

相关问题