Пример Boost Python дважды не удался - PullRequest
2 голосов
/ 08 января 2011

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

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

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 (какио) работает отлично.Итак, второй вопрос, в чем проблема с импортом?

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

1 Ответ

5 голосов
/ 12 января 2011

Используйте 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.

...