J'ai une fonction extern decalred dans C
:Quel est le type de cgo équivalent à un pointeur const à une structure?
//extern void goCallback(const struct libvlc_event_t*, void*);
A définir dans go
:
//export goCallback
func goCallback(event unsafe.Pointer, userData unsafe.Pointer) {
log.Fatal("TODO goCallback")
}
Lors de la compilation du code, je reçois les erreurs de type conflit
# 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*);
^~~~~~~~~~
Quelle est le go
équivalent à const struct libvlc_event_t*
?
Le compilateur se plaint car la fonction 'goCallback' est définie à la fois dans' C' et dans 'Go'. Le '// export ...' est nécessaire lorsque vous voulez que votre fonction 'go' soit accessible depuis' C'. Si vous voulez utiliser la fonction 'C' de' go', // // extern void ... 'est suffisant. – putu
En regardant les https://github.com/golang/go/wiki/cgo#function-variables, je le fais bien, accéder à un 'go' à partir de' c' nécessite à la fois la '// déclaration extern' et le // commentaire d'exportation. – tarrsalah
Je suis désolé, j'ai mal compris votre question. Le compilateur se plaint parce qu'il y a deux fonctions 'goCallback' avec une signature différente. J'ai écrit une réponse, j'espère que ça aide. – putu