Hello,
I struggle to understand why this simple cgo program does not get linked, I would provide example in playground, but it does not seem to support cgo.
```
package main
// #include <stdio.h>
//
// extern int go_test_func(int c1, int c2);
//
// int c_test_func(int c1, int c2)
// {
// return go_test_func(c1,c2);
// }
import "C"
import (
"fmt"
)
//export go_test_func
func go_test_func(c1, c2 C.int) C.int {
return c1 + c2
}
func main() {
fmt.Printf("Result: %d\n", C.c_test_func(2, 2))
}
```
I am getting:
# command-line-arguments
/sw/packages/xr/go/1.19.4/pkg/tool/linux_amd64/link: running gcc failed: exit status 1
/tmp/go-link-349950461/000001.o: In function `c_test_func':
/nobackup/sbezverk/projects/go/worspace/cgo_test/cgo.go:9: multiple definition of `c_test_func'
/tmp/go-link-349950461/000000.o:/tmp/go-build/cgo.go:9: first defined here
collect2: error: ld returned 1 exit status
Thank you
Serguei
After looking in cgo generated files, I found that in fact function “c_test_func” is defined in 2 places.
1: ./cgo.cgo2.c:29: int c_test_func(int c1, int c2)
#line 3 "/nobackup/sbezverk/projects/go/worspace/cgo_test/cgo.go"
#include <stdio.h>
extern int go_test_func(int c1, int c2);
int c_test_func(int c1, int c2)
{
return go_test_func(c1,c2);
}
2: ./_cgo_export.h:27: int c_test_func(int c1, int c2)
#line 3 "cgo.go"
#include <stdio.h>
extern int go_test_func(int c1, int c2);
int c_test_func(int c1, int c2)
{
return go_test_func(c1,c2);
}
_cgo_export.h is included in ./_cgo_export.c:4:#include "_cgo_export.h". Making it a second definition of the same function.
Is it a bug or what cgo.go does Go calling C func which in turn calls Go is not supported?
Thank you
Serguei