gpt4 book ai didi

python - 为什么 go build 找不到 Py_None?

转载 作者:IT王子 更新时间:2023-10-29 02:12:49 25 4
gpt4 key购买 nike

我正在为 Python 包装一个 Go 库。我需要能够返回 None,但它在编译时找不到它:

/*
#cgo pkg-config: python3
#define Py_LIMITED_API
#include <Python.h>
*/
import "C"

//export Nothing
func Nothing(self, args *C.PyObject) (status *C.PyObject) {
C.Py_IncRef(C.Py_None)
return C.Py_None
}

这是 go build 的输出

go build -buildmode=c-shared -o mymodule.so
# example.com/mywrapper
/tmp/go-build293667616/example.com/mywrapper/_obj/_cgo_main.o:(.data.rel+0x0): undefined reference to `Py_None'
collect2: error: ld returned 1 exit status

我不明白它如何找到所有其他 Py* 函数和类型(PyArgs_ParseTuplePyLong_FromLong 工作得很好),但找不到Py_None。显然正在加载 Python 库。这是怎么回事?

最佳答案

感谢 Ismail Badawi 的评论,答案是用 C 语言编写一个返回 None 的函数。这是必需的,因为 Py_None 是一个 Go 看不到的宏。

none.c

#define Py_LIMITED_API
#include <Python.h>

PyObject *IncrNone() {
Py_RETURN_NONE;
}

mymodule.go

/*
#cgo pkg-config: python3
#define Py_LIMITED_API
#include <Python.h>

PyObject *IncrNone();
*/
import "C"

//export Nothing
func Nothing(self, args *C.PyObject) (status *C.PyObject) {
return C.IncrNone()
}

关于python - 为什么 go build 找不到 Py_None?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40688567/

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