I am trying to use CGO to bundle C files with a Golang package. Following instructions here:
https://karthikkaranth.me/blog/calling-c-code-from-go/
http://akrennmair.github.io/golang-cgo-slides/#1
I am getting this error:
# main src/main/main.go:16:8: could not determine kind of name for C.free src/main/main.go:23:10: could not determine kind of name for C.greet
here is the structure:
main.go
just looks like:
package main
// #cgo CFLAGS: -g -Wall
// #include <stdlib.h>
// #include "genericc/greeter.h"
import "C"
import (
"fmt"
"unsafe"
)
func main() {
name := C.CString("Gopher")
defer C.free(unsafe.Pointer(name))
year := C.int(2018)
ptr := C.malloc(C.sizeof_char * 1024)
defer C.free(unsafe.Pointer(ptr))
size := C.greet(name, year, (*C.char)(ptr))
b := C.GoBytes(ptr, size)
fmt.Println(string(b))
}
and I run test.sh to build it:
#!/usr/bin/env bash
dir="$(cd `dirname "$0"` && pwd)"
export GOPATH="$dir"
cd "$dir"
export CGOFILES=main
go install main
but when I run the bash script I get that error.
I follow the instructions:
For example,
gocbuf.go
:Output:
Your code organization makes no sense to me.
You should have package
greeter
, which wrapsC
functions viacgo
. For example,with skeleton files
greeter.go
:greeter.c
:greeter.h
To install the
greeter
package, simply usego install
.Don't use relative paths. Don't use bash scripts.