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 @ 2024-02-26 13:24  潜行1  阅读(64)  评论(0)    收藏  举报