CGO

cgo尝试

环境

gcc需要; go环境变量 CGO_ENABLED需要设置为1

goland不支持补全cgo中的c或者c++代码, 需要使用专门的cpp的ide, 我现在用的是 vs2022

类型系统的对应

c的类型与cgo都需要对应;
00:26有一张表格

编译器类型

gcc和g++都是常用的编译器

cgo语句

cgo语句是cgo功能的语法命令.
需要导入go的C包, 然后在导入语句上面写上特定语法的注释才能生效.
注意需要是单独导入才能生效...?

一个cgo的示例代码:

package mygo

/*
#cgo CFLAGS: -I/root/USB_SATA_v1.4/include
#cgo LDFLAGS: -L/root/USB_SATA_v1.4/arm64 -lTassSDF4PCIeSM
#include "SDF4PCIeSM.h"
#include "TassAPI4PCIeSM.h"
#include "TassMngAPI4PCIeSM.h"
*/
import "C"
import (
	"fmt"
	"time"
	"unsafe"
)

func CallPrintf(content string) {
	var device unsafe.Pointer // void*
	result := C.SDF_OpenDevice(&device)
	if result != 0 {
		fmt.Printf("设备打开失败")
		return
	} else {
		fmt.Printf("设备打开成功\n")
		time.Sleep(3 * time.Second)
		defer func() {
			C.SDF_CloseDevice(device)
			fmt.Printf("设备关闭成功\n")
		}()
	}
}

func main() {
	CallPrintf("")
}

posted @   潜行1  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示