1
私はPython用のGoライブラリをラッピングしています。私はNoneを返しできるようにする必要がありますが、それはコンパイル時にそれを見つけていない。ここで なぜPy_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_ParseTuple
とPyLong_FromLong
はうまく動作しますが)Py_None
が見つかりません。 Pythonライブラリは明らかに読み込まれています。何が起きてる?
Py_None'は、マクロである 'のようになります。https://github.com/python/cpython/blob/ 321fd597f9dff757185bcfeb5fc39536746e06ab /インクルード/オブジェクト.ht#L908 –
うわー、私は決してそれを推測していないでしょう。あなたはどこから戻ってきたのですか?確かにこれは誰かがぶつかったものです。 –
私はcgoについて何も知らないけど、おそらく '_Py_NoneStruct'のアドレスを参照することができます。これは' Py_None'が展開するものです。 –