私はC
にdecalredはextern機能があります。構造体へのconstポインタに相当するcgo型は何ですか?
//extern void goCallback(const struct libvlc_event_t*, void*);
go
で定義する:
//export goCallback
func goCallback(event unsafe.Pointer, userData unsafe.Pointer) {
log.Fatal("TODO goCallback")
}
コードをコンパイルし、私は
# github.com/tarrsalah/libvlc-go
In file included from $WORK/github.com/tarrsalah/libvlc-go/_obj/_cgo_export.c:3:0:
cgo-gcc-export-header-prolog:42:13: error: conflicting types for ‘goCallback’
In file included from $WORK/github.com/tarrsalah/libvlc-go/_obj/_cgo_export.c:3:0:
../../../tarrsalah/libvlc-go/event_manager.go:6:13: note: previous declaration of ‘goCallback’ was here
//extern void goCallback(const struct libvlc_event_t*, void*);
^~~~~~~~~~
/tmp/go-build855229382/github.com/tarrsalah/libvlc-go/_obj/_cgo_export.c:17:6: error: conflicting types for ‘goCallback’
void goCallback(void* p0, void* p1)
^~~~~~~~~~
In file included from $WORK/github.com/tarrsalah/libvlc-go/_obj/_cgo_export.c:3:0:
../../../tarrsalah/libvlc-go/event_manager.go:6:13: note: previous declaration of ‘goCallback’ was here
//extern void goCallback(const struct libvlc_event_t*, void*);
^~~~~~~~~~
タイプ競合エラーが出るとは何かgo
は3210に相当しますか?
関数 'goCallback'が' C'と 'Go'の両方で定義されているため、コンパイラは文句を言います。あなたが 'C'から' go'関数にアクセスできるようにするには、 '// export ...'が必要です。 'go'から' C'関数を使いたい場合は、// extern void ...で十分です。 – putu
https://github.com/golang/go/wiki/cgo#function-variablesを見て、私は正しいことをしています。 'c'から' go'にアクセスするには、 '// extern宣言'//コメントをエクスポートします。 – tarrsalah
申し訳ありませんが、私はあなたの質問に誤解しました。コンパイラーは、異なる署名を持つ2つの 'goCallback'関数があるので不平を言います。私は答えを書いた、それが助けてくれることを願う。 – putu