如何在 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
在上面的评论中写一些 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