这可能不是您想要的,但是在 Go 1.5 中(即将在今年8月推出),您将能够使用go工具构建与C兼容的库。所以有了这个
_main.c
#include <stdio.h>int main(){ char *string_to_pass = NULL; if (asprintf(&string_to_pass, "This is a test.") < 0) { printf("asprintf fail"); return -1; } PrintString(string_to_pass); return 0;}这在你的
main.go
package mainimport "C"import "fmt"//export PrintStringfunc PrintString(cs *C.char) { s := C.GoString(cs) fmt.Println(s)}func main() {}您可以针对静态库执行以下操作:
go build -buildmode c-archive -o mygopkg.agcc -o main _main.c mygopkg.a -lpthread
对于共享库:
go build -buildmode c-shared -o mygopkg.soLD_RUN_PATH=$(pwd) gcc -o main _main.c mygopkg.so -lpthread
(
LD_RUN_PATH在这里使链接器在您正在构建的同一目录中查找共享库。)
有关更多信息,请参见Go执行模式设计文档。



