CGO
golang 中调用 c/c++ 代码有三种方式
- 直接
嵌套
在go文件中使用,最简单直观的 - 导入
动态库 .so 或 dll
的形式,最安全但是很不爽也比较慢的 - 直接引用 c/c++ 文件的形式,层次分明,容易随时修改看结果的
需要的环境支持
- Linux 具备 gcc 与 g++ 即可
- Mac 参考 Linux
- Windows 需要安装 mingw,否则编译时会有这类错:
cannot find -lmingwex
嵌套
调用动态链接库 .so
目录结构
直接引用 c/c++ 文件的形式
目录结构
直接运行go run main.go
注意事项
- 但凡要引用与 c/c++ 相关的内容,写到 go 文件的头部
注释
里面 - 嵌套的 c/c++ 代码必须符合其语法,不与 go 一样
import "C"
这句话要紧随,注释后,不要换行,否则报错- go 代码中调用 c/c++ 的格式是:
C.xxx()
,例如 C.add(2, 1)
CFLAGS: -I路径
这句话指明头文件所在路径,-Iinclude 指明 当前项目根目录的 include 文件夹
LDFLAGS: -L路径 -l名字
指明动态库的所在路径,-Llib -llibvideo,指明在 lib 目录下面以及它的名字 video
注:此处的 LDFLAGS 更改动态库的路径后,-L指明路径,无法验证通过