2011-01-08 3 views
2

Я один, кто пытался использовать следующую комбинацию: boost_1_45_0, MSVC 10, Python31?Пример Boost Python не удался дважды

Я обнаружил, что базовый образец из boost (boost_1_45_0 \ libs \ python \ example \ quickstart \ embedding.cpp) Ни скомпилированный (я не нашел, как его исправить, см. Ниже), ни работает. Compile проблема времени:

if (PyImport_AppendInittab("embedded_hello", initembedded_hello) == -1) 
    throw std::runtime_error("Failed to add embedded_hello to the interpreter's " 
      "builtin modules"); 

Я обнаружил, что правильное название не initembedded_hello но init_module_embedded_hello. Итак, мой первый вопрос, я прав насчет этого переименования?

Вторая проблема SystemError: NULL result without error in PyObject_Call при импорте моей объявленной модуль:

from embedded_hello import * 

закомментировав импортирование показывает, что модули внутреннего языка Python (как Io) работает отлично. Итак, второй вопрос, что проблема с импортом?

Любая помощь будет оценена!

+0

Все ли построено как 64-битное/32-битное? – GWW

+0

@GWW - это 32 – Dewfy

+0

ах, я иногда получаю странные ошибки, если одна вещь построена как 64 бит, а остальные 32 бит. – GWW

ответ

5

Используйте PyInit_embedded_hello вместо initembedded_hello для Python 3. Работает для меня с msvc9.

По-видимому, quickstart \ embedding.cpp не обновлен для Python 3. Посмотрите на pyhon/test/exec.cpp, который похож и обновлен.

Msvc10 использует другую библиотеку времени выполнения C, чем Python, что может привести к сбоям во время выполнения. Рекомендуемым компилятором для создания расширений Python 2.6, 2.7, 3.1 и 3.2 является msvc9 или компилятор, который ссылается на vc90crt.

+0

спасибо за ответ, но мой вопрос касается именно Python3. Возможно ли вообще использовать Python3 под boost? – Dewfy

+0

@Dewfy: Да, boost работает с Python 3. В примере embedded.cpp вы должны использовать ** PyInit_embedded_hello ** вместо initembedded_hello – cgohlke

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