如何在 CGO 中使用外部 .c 文件?

How to use external .c files with CGO?

在上面的评论中写一些 C 代码 import "C" 很简单:

// foo.go
package main

/*
int fortytwo() {
    return 42;
}
*/
import "C"
import "fmt"

func main() {
    fmt.Printf("forty-two == %d\n", C.fortytwo())
    fmt.Printf("forty-three == %d\n", C.fortythree())
}

而且效果很好:

$ go install
$ foo
forty-two == 42

但是,它自己的 .c 文件中的 C 代码:

// foo.c
int fortythree() {
  return 43;
}

...引用自 Go:

// foo.go
func main() {
    fmt.Printf("forty-two == %d\n", C.fortytwo())
    fmt.Printf("forty-three == %d\n", C.fortythree())
}

...不起作用:

$ go install
# foo
could not determine kind of name for C.fortythree

缺少 C 头文件 foo.h:

// foo.h
int fortythree();

像这样从 Go 中引用头文件:

// foo.go
package main

/*
#include "foo.h"

int fortytwo() {
    return 42;
}
*/
import "C"
import "fmt"

func main() {
    fmt.Printf("forty-two == %d\n", C.fortytwo())
    fmt.Printf("forty-three == %d\n", C.fortythree())
}

看,foo.h的力量:

$ go install
$ foo
forty-two == 42
forty-three == 43