工程结构如上图所示,我们需要实现的目标是在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"

中间不能有空格