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("")
}

浙公网安备 33010602011771号