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文件路径