2

只有我一个人尝试使用以下组合: 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 的模块(如 io)工作正常。那么第二个问题导入有什么问题?

任何帮助,将不胜感激!

4

1 回答 1

5

在 Python 3 中使用 PyInit_embedded_hello 而不是 initembedded_hello。适用于我的 msvc9。

显然 quickstart\embedding.cpp 没有针对 Python 3 进行更新。看看 pyhon/test/exec.cpp,它是类似的并且是最新的。

Msvc10 使用与 Python 不同的 C 运行时库,这可能会导致运行时崩溃。用于构建 Python 2.6、2.7、3.1 和 3.2 扩展的推荐编译器是 msvc9,或链接到 vc90crt 的编译器。

于 2011-01-11T21:03:59.427 回答