我有一個外部函數decalred在C
:什麼是cgo類型等同於指向結構的const指針?
//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?
編譯器抱怨,因爲在'C'和'Go'中都定義了'goCallback'函數。當你希望你的'go'函數可以從'C'訪問時,需要'// export ...'。如果你想從'go'使用'C'功能,'// extern void ...'就足夠了。 – putu
看一下https://github.com/golang/go/wiki/cgo#function-variables,我做得很對,從'c'訪問'go'需要'// extern聲明'和'//註釋'。 – tarrsalah
對不起,我誤解了你的問題。編譯器抱怨,因爲有兩個具有不同簽名的'goCallback'函數。我寫了一個答案,希望它有幫助。 – putu