這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
http://tonybai.com/2012/09/26/interoperability-between-go-and-c/
// foo.h int count;void foo(); //foo.c#include "foo.h" int count = 6;void foo() { printf("I am foo!\n");}
//foo.gopackage main // #cgo LDFLAGS: -L ./ -lfoo// #include <stdio.h>// #include <stdlib.h>// #include "foo.h"import "C"import "fmt“ func main() { fmt.Println(C.count) C.foo()}
使用靜態庫$> gcc -c foo.c$> ar rv libfoo.a foo.o
[diego@localhost ~/GoWork/src/applycation/testCgo]# go build foo.go[diego@localhost ~/GoWork/src/applycation/testCgo]# ./foo 6I am foo!
[diego@localhost ~/GoWork/src/applycation/testCgo]# gcc -fPIC -shared -o libfoo.so foo.c[diego@localhost ~/GoWork/src/applycation/testCgo]# rm lilibfoo.a libfoo.so* [diego@localhost ~/GoWork/src/applycation/testCgo]# rm libfoo.a[diego@localhost ~/GoWork/src/applycation/testCgo]# go build fofoo* foo.c foo.go foo.h foo.o [diego@localhost ~/GoWork/src/applycation/testCgo]# go build foo.foo.c foo.go foo.h foo.o [diego@localhost ~/GoWork/src/applycation/testCgo]# go build foo.go [diego@localhost ~/GoWork/src/applycation/testCgo]# ./foo 6I am foo![diego@localhost ~/GoWork/src/applycation/testCgo]#