1、cgo环境搭建
初入go坑,记录一次工作中需要封装windows api 的过程。既然是go调用C++那么首先要配置cgo的环境了。要使用CGO特性,需要安装C/C++构建工具链,在macOS和Linux下是要安装GCC,在windows下是需要安装MinGW工具。同时需要保证环境变量CGO_ENABLED被设置为1,这表示CGO是被启用的状态。在本地构建时CGO_ENABLED默认是启用的,当交叉构建时CGO默认是禁止的。比如要交叉构建ARM环境运行的Go程序,需要手工设置好C/C++交叉构建的工具链,同时开启CGO_ENABLED环境变量。然后通过import "C"语句启用CGO特性。
由于mingw官方下载地址被墙,网上很多版本有问题,有的不能引用C库,有的找不到系统函数导出lib,这里推荐大家参考“如何优雅地配置 Windows 环境下的 MSys2 + Git 开发环境?”这篇博客,MSys2在配置好清华大学的镜像地址后,工具包升级安装飞快。
2、cgo基础知识点
a) C编译器配置
#cgo CFLAGS: -I./number
b) C++ 编译器参数配置
#cgo CXXFLAGS: -std=c++11
c) 引入第三方库
#cgo LDFLAGS: -L${SRCDIR}/number -lnumber
C头文件检索目录可以是相对目录,但是库文件检索目录则需要绝对路径
d) C导出函数头文件
//#include "number.h"
e) Go语言中数值类型和C语言数据类型对应关系