工程结构如上图所示,我们需要实现的目标是在go文件中调用c文件
foo.c如下:
#include <stdio.h>
#include "foo.h"
int count = 6;
void foo() {
printf("I am foo!\n");
}
foo.go如下
package main
/*
#cgo LDFLAGS: -L./ -lfoo
#include <stdio.h>
#include <stdlib.h>
#include "foo.h"
*/
import "C"
func main() {
C.foo()
}
foo.h如下:
//foo.h
void foo();
编译过程如下:
1、先将c文件编译为.o文件,然后生成动态链接库.dylib文件
(1) clang -c foo.c
(2 clang -shared foo.o -o libfoo.dylib
2、在上述的动态链接库生成之后,在foo.go中添加动态链接命令:#cgo LDFLAGS: -L./ -lfoo
需要注意的是
/*
C code
*/
import "C"
中间不能有空格