Winddow系统下关于Golang使用Cgo的配置

时间:2024-06-07 20:04:27

1.配置CGO_ENABLED为1

go env -w CGO_ENABLED=1

2.安装gcc环境,否则出现cgo: C compiler "gcc" not found: exec: "gcc": executable file not found in %PATH%错误

安装包:链接:https://pan.baidu.com/s/1sgF9lijqGePnFLiiixt4Zg?pwd=am7z 
提取码:am7z。也可以官网下载自己想要版本。

3.配置环境变量,将gcc的路径添加添加到path,步骤如下。

添加路径到path。

4. 若出现一下错误

# runtime/cgo
gcc_linux_amd64.c: In function '_cgo_sys_thread_start':
gcc_linux_amd64.c:57:2: error: unknown type name 'sigset_t'; did you mean '_sigset_t'?
  sigset_t ign, oset;

......

可以设置GOOS=windows

go env -w GOOS=windows

5.简单例子

  1. 文件目录
  2. 文件内容
    // main.go
    package main
    
    /*
    #cgo CFLAGS: -I${SRCDIR}
    #cgo LDFLAGS: -L${SRCDIR} -lhello
    #include "hello.h"
    int Add(int a, int b) {
    	return a + b;
    }
    */
    import "C" // 注意C代码和 import "C" 之间不可存在空行
    
    import "fmt"
    
    func main() {
    	a := C.int(10)
    	b := C.int(20)
    	c := C.Add(a, b)
    	fmt.Println(c) // 30
    
    	C.SayHello()
    }
     
    // hello.c
    
    #include <stdio.h>
    #include "hello.h"
    
    void SayHello()
    {
        printf("Hello, cgo!\n");
    }
    
    // hello.h
    
    void SayHello();
    
  3. 编译成库
    gcc -c hello.c
    ar -crv libhello.a hello.o
  4. 运行