I am trying to write a shared module that will be called from C, but I have run into a problem in using the work-around in https://github.com/golang/go/wiki/cgo#the-basics for calling variadic C functions.
The case that I have is more complex, but altering the example at the wiki demonstrates the problem; the function definition that is used to call on to printf appears more than once in the C code generated by Cgo. ``` ~/src/github.com/kortschak/cgo $ cat cgo.go package main /* #include <stdio.h> #include <stdlib.h> void myprint(char* s) { printf("%s\n", s); } */ import "C" import "unsafe" //export Example func Example() { cs := C.CString("Hello from stdio\n") C.myprint(cs) C.free(unsafe.Pointer(cs)) } func main() {} ~/src/github.com/kortschak/cgo $ go build -o cgo.so -buildmode=c-shared . # github.com/kortschak/cgo /tmp/go-build899365101/b001/_x002.o: In function `printf': /usr/include/x86_64-linux-gnu/bits/stdio2.h:104: multiple definition of `myprint' /tmp/go-build899365101/b001/_x001.o:/usr/include/x86_64-linux- gnu/bits/stdio2.h:104: first defined here collect2: error: ld returned 1 exit status ``` Removing the "//export Example" comment prevents this failure, but then obviously also loses the exported function. I have tried protecting the function in a #ifndef/#endif, to no avail. Is it reasonable for me to expect this to work? If so, what am I doing wrong? thanks Dan -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/ab825669afe753c505952f18fb6c61bc8e2dd24d.camel%40kortschak.io.