CgoCgo#cgoCFLAGSLDFLAGS
hi()
package main
import "fmt"
/*
#include <stdio.h>
void hi() {
printf("hello world!\n");
}
*/
import "C" //这里可看作封装的伪包C, 这条语句要紧挨着上面的注释块,不可在它俩之间间隔空行!
func main() {
C.hi()
fmt.Println("Hi, vim-go")
}
运行结果:
root@slave2:/home/cgo# go run main.go
hello world!
Hi, vim-go
Cgo
/*
* hi.c
* created on: July 1, 2017
* author: mark
*/
#include <stdio.h>
void hi() {
printf("Hello Cgo!\n");
}
h文件
void hi();
编译成动态库.so
root@slave2:/home/cgo# gcc -c -fPIC -o hi.o hi.c
root@slave2:/home/cgo# gcc -shared -o libhi.so hi.o
Go文件
package main
import "fmt"
/*
#cgo CFLAGS: -I./
#cgo LDFLAGS: -L./ -lhi
#include "hi.h" //非标准c头文件,所以用引号
*/
import "C"
func main() {
C.hi()
fmt.Println("Hi, vim-go")
}
CFLAGS-I.hLDFLAGS-L-llibhi.so-lhilibhi.solib.so
root@slave2:/home/cgo# go run main.go
Hello Cgo!
Hi, vim-go
cgopk-config.so.so.so