CGO封装
是什么CGO通俗来讲是为了实现golang调用C语言编写的程序的辅助工具,按特定格式进行编译,调用C即可直接调用C中实现的函数。怎么做下面介绍我自己在调用时的做法,亲测可以正常使用项目目录结构include(xxx.c, xxx.h …)lib(c编译出的动态库)main.go头文件需要在main.go中添加头文件。/*#cgo CFLAGS: -I./include#cgo LDFLAGS: -
·
是什么
CGO通俗来讲是为了实现golang调用C语言编写的程序的辅助工具,按特定格式进行编译,调用C
即可直接调用C中实现的函数。
怎么做
下面介绍我自己在调用时的做法,亲测可以正常使用
-
项目目录结构
include(xxx.c, xxx.h …)
lib(c编译出的动态库)
main.go -
头文件
需要在main.go
中添加头文件。
/*
#cgo CFLAGS: -I./include
#cgo LDFLAGS: -L./lib -xxx
#include <stdio.h>
#include <stdlib.h>
#include "xxx.h"
*/
import "C"
注意import "c"
与上面的注释代码没有间隔。
主要分为三块:
1. cgo CFLAGS:编译器标志,将相应的头文件和代码文件include进来
2. cgo LDFLAGS:链接器标志,将相应C代码的动态库include进来
3. 相应的头文件,直接include进来,包括一些基本使用的头文件
然后编译golang代码,编译器会自动编译C代码和动态库,之后正常运行即可。
- 类型转换
1. 可以直接定义c中类型:a := new(C.int)
2. 类型转换,使用unsafe.Pointer进行指针类型强转。(*C.uchar)(unsafe.Pointer(&testbyteArray[0]))将byte数组首地址指针强转为unsigned char类型
ref
- https://mp.weixin.qq.com/s/I9IvJnKeJY8IpVB4lcWXNA
更多推荐
所有评论(0)