gpt4 book ai didi

python - 如何正确设置 python/c 库?

转载 作者:太空宇宙 更新时间:2023-11-04 02:17:57 24 4
gpt4 key购买 nike

我一直在努力让 python/c 库喜欢我的 mingW 编译器。 python在线文档; http://docs.python.org/c-api/intro.html#include-files只提到我需要导入 python.h 文件。我是从安装目录下抓取的(windows平台需要),通过编译脚本进行测试: #include "Python.h"。这编译得很好。接下来,我尝试了 python/c API 页面上显示的代码片段:

PyObject *t;
t = PyTuple_New(3);
PyTuple_SetItem(t, 0, PyInt_FromLong(1L));
PyTuple_SetItem(t, 1, PyInt_FromLong(2L));
PyTuple_SetItem(t, 2, PyString_FromString("three"));

出于某种原因,如果我删除最后 4 行(以便仅保留 pyObject 变量定义),编译器将编译代码,但调用元组的实际构造函数会返回错误。

我可能在这里遗漏了一些非常明显的东西,因为我是 C 的新手,但是有人知道它是什么吗?

最佳答案

我做了一些狡猾的谷歌搜索,如果您在链接器阶段遇到错误(错误消息可能包含十六进制字符串或对 ld 的引用),您可能需要确保 Python Windows 版本附带的库已转换为 GCC (MinGW) 可以读取的格式;见here ,以及其他网站。还要确保 GCC 可以找到并在需要时使用库文件,使用 -L/my/directory-lpython26 (适本地替换您的路径和 Python 版本) .

如果错误发生在编译阶段(如果消息中给出了行号),请确保您不需要将任何其他目录添加到包含搜索路径。 Python 可能(我没有使用它的 C API)在 Python.h 中包含其他头文件,这些头文件存储在其他目录中。如果是这种情况,使用 GCC 的 -I/my/directory/ 标志告诉它也在那里搜索。

不过,准确(复制粘贴)的错误消息会有所帮助。


警告:下面的文字没有回答问题!

你把代码放在一个函数里了吗?尝试将它放在 main 中,如下所示:

int main(int argc, char *argv[]) {
PyObject *t;
t = PyTuple_New(3);
PyTuple_SetItem(t, 0, PyInt_FromLong(1L));
PyTuple_SetItem(t, 1, PyInt_FromLong(2L));
PyTuple_SetItem(t, 2, PyString_FromString("three"));

return 0;
}

此代码将在程序执行时运行。然后,您可以使用提供的任何其他方法来检查元组的内容。如果它不作为可执行程序单独运行,则将其粘贴在不同名称的方法中;我假设您有另一种方法来调用该函数。

PyObject *t; 定义在函数外部作为全局变量定义有效,在函数内部有效,将其声明为局部变量。其他四行是函数调用,必须在另一个函数中。

以上代码本身并不是一个程序。您是否正在尝试为 Python 编写 C 扩展?如果是这样,请查看一些更完整的文档 here .

关于python - 如何正确设置 python/c 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4619640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com