2013-07-30 5 views
2
кода

CPP-модуль:Python C версии API расстройка для модуля

#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 

питон консоли (на том же хосте или другой - никакой разницы):

>>> 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? Откуда?

ответ

0

Номер версии API Python изменяется, если в некоторых внутренних вызовах API есть несовместимые изменения. Python 2.4 использует номер версии 1012. Python 2.5 и более поздние версии используют версию 1013.

Вы, кажется, включаете Python 2.5, поэтому вы должны получить версию 1013. Версия API определена в Include/modsupport.h. Этот файл поврежден или был изменен? Что-то еще переопределяет значение?

+0

Причина - повышение, настроенное для python 2.4 давным-давно. – user694989

+0

Все права защищены. Причина - это повышение, настроенное для python 2.4 давным-давно. Затем был установлен python 2.4. Но не сейчас. удалите libboost_python и rebuild boost устранили несоответствие. – user694989

 Смежные вопросы

  • Нет связанных вопросов^_^