【问题标题】:Python C API version mismatch for module模块的 Python C API 版本不匹配
【发布时间】:2013-07-30 22:57:04
【问题描述】:

cpp-模块代码:

#include <iostream>
#include <boost/python.hpp>

void Hello()
{
    std::cout << "string: " << PYTHON_API_STRING << "\n";
    std::cout << "int: " << PYTHON_API_VERSION << "\n";
}

BOOST_PYTHON_MODULE(hello)
{
    namespace py = boost::python;
    py::def("Hello", &Hello);
}

编译:

g++ -m32 -Wall -fPIC -I /usr/include -I /usr/include/python2.5/ hello.cpp -L /usr/lib/python2.5/ -Wl,-Bstatic -lboost_python -Wl,-Bdynamic -lgcc -shared -o hello.so

python 控制台(在同一主机上或其他 - 没有区别):

>>> import hello
__main__:1: RuntimeWarning: Python C API version mismatch for module hello: This Python has API version 1013, module hello has version 1012.
>>> hello.Hello()
string: 1013
int: 1013
>>>

为什么是 1012?从哪里来?

【问题讨论】:

    标签: python boost version mismatch


    【解决方案1】:

    当某些内部 API 调用发生不兼容的更改时,Python 的 API 版本号会更改。 Python 2.4 使用版本号 1012。Python 2.5 及更高版本使用版本 1013。

    您似乎包含 Python 2.5,因此您应该获得 1013 版本。API 版本在 Include/modsupport.h 中定义。该文件是否已损坏或已被修改?其他东西会覆盖该值吗?

    【讨论】:

    • 原因是很久以前为python 2.4配置了boost。
    • 好吧。原因是很久以前为 python 2.4 配置的 boost。然后安装了python 2.4。但不是现在。删除 libboost_python 并重建 boost 已经消除了不匹配。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    相关资源
    最近更新 更多