Go 语言中调用 C 语言函数

优质
小牛编辑
147浏览
2023-12-01

在 Go 语言开篇中我们已经知道,Go 语言与 C 语言之间有着千丝万缕的关系,甚至被称之为 21 世纪的C语言。

所以在 Go 与 C 语言互操作方面,Go 更是提供了强大的支持。尤其是在 Go 中使用 C,你甚至可以直接在 Go 源文件中编写 C 代码,这是其他语言所无法望其项背的。

格式:

  • 在 import "C" 之前通过单行注释或者通过多行注释编写C语言代码
  • 在 import "C" 之后编写 Go 语言代码
  • 在Go语言代码中通过 C.函数名称() 调用 C 语言代码即可

注意:import "C" 和前面的注释之间不能出现空行或其它内容,必须紧紧相连

package main
//#include <stdio.h>
//void say(){
// printf("Hello World\n");
//}
import "C"

func main()  {
	C.say()
}
package main
/*
#include <stdio.h>
void say(){
	printf("Hello World\n");
}
*/
import "C"

func main()  {
	C.say()
}
  • Go 语言中没有包名是C的包,但是这个导入会促使 Go 编译器利用 cgo 工具预处理文件
  • 在预处理过程中,cgo 会产生一个临时包,这个包里包含了所有 C 函数和类型对应的 Go 语言声明
  • 最终使得 cgo 工具可以通过一种特殊的方式来调用 import "C" 之前的 C 语言代码

常规问题:

如果编译报错 cc1.exe: sorry, unimplemented: 64-bit mode not compiled in,说明你使用的是 64 的 golang,而你使用的32位的MinGW,所以需要下载 64 位的 mingw 并配置环境变量,下载地址:https://www.baidu.com/s?wd=sorry%2C%20unimplemented%3A%2064-bit%20mode%20not%20compiled%20in