【发布时间】:2017-07-26 19:49:11
【问题描述】:
我正在尝试使用以下代码在 C 中调用 Python 代码:
#include <stdio.h>
#include <Python.h>
int main()
{
PyObject* pInt;
Py_Initialize();
PyRun_SimpleString("print('This is Python in C')");
Py_Finalize();
printf("\n");
return 0;
}
并尝试使用以下命令对其进行编译:
gcc python_test_in_c.c
但是它返回一个错误返回说:
undefined referance to `__imp __Py_Initialise`
undefined referance to `__imp__PyRun_SimpleSringFlags`
undefined referance to `__imp__Py_Finalise`
collect2.exe: error: ld returned 1 exit status
出了什么问题?我该如何解决这个问题?
任何帮助将不胜感激
P.S 我不确定,但这可能与我在位于 C:/MinGW 的 MinGW 的包含文件中复制了 Python 'include' 文件(包含 Python.h)有关
更新:我现在知道这样做是可以的,但被认为是不好的做法。
【问题讨论】:
-
你没有链接图书馆。
-
请编辑标题!这没有任何意义,只是误导。您不会“在 C 中嵌入 Python 代码”。您只需从 Python C API 调用函数。这与任何其他图书馆没有什么不同。
-
@Olaf 从技术上讲,这在我看来就像嵌入,请参阅
PyRun_SimpleString("print('This is Python in C')");。它通过库 API 嵌入。 -
@AjayBrahmakshatriya:标题完全不同。这并不是真正的嵌入,而是简单地将字符串传递给库函数。它与例如没有什么不同。
fopen没有人会说文件内容嵌入到 C 代码中。事实上,这个问题甚至与 Python 或可能的 C 无关,而是链接,并且用户没有提供任何信息来真正解决它(只是粗略的猜测)。 -
@Olaf python 2.7.13 文档将此称为非常高级嵌入。看到这个webpage
标签: python c python-3.x linker python-c-api