clang没用过,但gcc是肯定可以的

要导出的lib.go:

package main

import "C"
import "fmt"

//export GoCall
func GoCall(buffer *C.char) {
	fmt.Println(C.GoString(buffer))
}

func main() {

}

编译go代码

go build -buildmode=c-archive -o lib.a

运行后会生成lib.a 和lib.h

test.c

#include "lib.h"

int main(int argc, char const *argv[]) {
  GoCall((char *)argv[1]);
  return 0;
}

编译c:

gcc test.c lib.a -o test.exe -l winmm -l ntdll -l Ws2_32 

后面的`-l winmm -l ntdll -l Ws2_32 `应该是操作系统相关的东西,linux下则需要添加 -lpthread。

没玩过mac,楼主可以自己试试……遇到lib.a(也就是你用go编译出来的那个库) 报错:undefined refrence to ‘xxxx’,就去搜一下看是缺失什么。

你遇到的也许是 clang编译时不知道lib.a 在哪里,如果是gcc,可以用-L目录解决……或者直接指定.a文件路径