在C中嵌入Python:未定义的引用(但在Go中有效)

2024-10-01 09:25:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将Python3.7嵌入Windows10中的C应用程序中。你知道吗

#define PY_SSIZE_T_CLEAN
#include <Python.h>

int main () {
    Py_Initialize();
    PyRun_SimpleString("print('OK')");
}

我使用以下命令进行编译:(MinGW-W64-builds-4.3.4,gcc7.3.0)

gcc "-IC:/Program Files/Python37_64/include" "-LC:/Program Files/Python37_64/libs" -lpython37 main.c

但它给出了以下错误:

C:\Users\Paul\AppData\Local\Temp\ccKQF3zu.o:main.c:(.text+0x10): undefined reference to `__imp_Py_Initialize'
C:\Users\Paul\AppData\Local\Temp\ccKQF3zu.o:main.c:(.text+0x25): undefined reference to `__imp_PyRun_SimpleStringFlags'
collect2.exe: error: ld returned 1 exit status

奇怪的是,当我在Go 1.13(Golang)中尝试同样的方法时,它确实有效:

package main

/*
#cgo CFLAGS: "-IC:/Program Files/Python37_64/include"
#cgo LDFLAGS: "-LC:/Program Files/Python37_64/libs" -lpython37
#define PY_SSIZE_T_CLEAN
#include <Python.h>

void run () {
    Py_Initialize();
    PyRun_SimpleString("print('OK')");
}

*/
import "C"

func main () {
    C.run()
}

编译命令:

go build python.go

如何解决这个问题?你知道吗


Tags: pycleanincludemainokfilespyrunprogram
1条回答
网友
1楼 · 发布于 2024-10-01 09:25:10

我在this answer中找到了解决方案。你知道吗

参数main.c必须放在-lpython37之前。你知道吗

所以这是可行的:

gcc "-IC:/Program Files/Python37_64/include" "-LC:/Program Files/Python37_64/libs" main.c -lpython37 

相关问题 更多 >