3

在用 C 编写 Python扩展时,我只是想测试一些东西,但意识到我不能PyObject*从 C 构建 s int。这是一个演示问题的可编译代码片段(#include <Python.h>如果不是在 Mac 上,您可能必须这样做),

#include <Python/Python.h>
int main(){
    PyObject* obj = Py_BuildValue("i", 42);
    return 0;
}

但这导致Segmentation fault: 11. 基于 Xcode 的 LLDB,调用时看起来有问题PyInt_FromLong

如果我尝试做同样的事情但使用double,

PyObject* obj = Py_BuildValue("d", 42.0);

它工作得很好......我在网上找不到任何东西并且没有想法 - 任何帮助表示赞赏。

4

1 回答 1

4

如果您尝试将 Python 嵌入到 C 程序中,则首先必须使用 初始化 Python Py_Initialize(),并且应该Py_Finalize()在完成后调用。

尝试这个...

#include <Python/Python.h>

int main()
{
    Py_Initialize();
    PyObject* obj = Py_BuildValue("i", 42);
    Py_Finalize();
    return 0;
}

...并查看嵌入文档以获取更多示例。

于 2013-04-28T10:06:13.470 回答