3

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?どこから?

4

1 に答える 1

1

一部の内部 API 呼び出しに互換性のない変更がある場合、Python の API バージョン番号が変更されます。Python 2.4 はバージョン番号 1012 を使用します。Python 2.5 以降はバージョン 1013 を使用します。

Python 2.5 が含まれているように見えるので、バージョン 1013 を取得する必要があります。API バージョンは、Include/modsupport.h で定義されています。そのファイルは破損していますか、それとも変更されていますか? 他の何かが値をオーバーライドしますか?

于 2013-07-31T04:42:54.367 に答える