【发布时间】:2018-05-06 09:09:00
【问题描述】:
我试图弄清楚为什么我不能简单地通过它的 C API 获取和设置 python 路径。我在 Ubuntu 17.10 上使用 Python3.6,gcc 版本为 7.2.0。编译:
gcc pytest.c `python3-config --libs` `python3-config --includes`
#include <Python.h>
int main()
{
Py_Initialize(); // removes error if put after Py_SetPath
printf("setting path\n"); // prints
Py_SetPath(L"/usr/lib/python3.6"); // Error in `./a.out': free(): invalid size: 0x00007fd5a8365030 ***
printf("success\n"); // doesn't print
return 0;
}
设置路径可以正常工作,除非我也尝试在这样做之前获取路径。如果我完全获得了路径,即使只是在不修改返回值或任何内容的情况下进行打印,我也会收到“双重释放或损坏”错误。
非常困惑。我做错了什么还是这是一个错误?如果是这样,有人知道解决方法吗?
编辑:调用Py_Initialize(); 后也会出错。更新了代码。现在即使我不先调用 Py_GetPath() 也会出错。
【问题讨论】:
-
为什么要使用 C++ 编译器来编译 C 代码?这样做会使 C 代码成为 C++ 代码,从而使您的问题标记无效。
-
Python.h是否负责包含stdio.h? -
我不小心输入了 g++。与 gcc 的结果相同。是的
Python.h包括stdio.h。 -
您可以很好地编辑您的问题并更正任何“错别字”。
-
大部分 Python C API 函数在
Py_Initialize()之前无法使用。文档说Py_SetPath()可以,但他们没有说Py_GetPath()可以在Py_Initialize()之前调用。你有什么理由认为它可以吗?
标签: python c python-c-api