gpt4 book ai didi

go - 使用 CGO 动态选择正确的操作系统和处理器架构

转载 作者:IT王子 更新时间:2023-10-29 01:08:27 26 4
gpt4 key购买 nike

我只能访问动态链接共享库的 linux 和 darwin 发行版。

以下是我如何将库与 Golang 集成

// #cgo LDFLAGS: -L${SRCDIR}/build -lprocessing_lib
// #include "Processing-bridge.h"
// #include <stdlib.h>
import "C"
import "unsafe"

type ProcessorWrapper struct {
ptr unsafe.Pointer
}

func init() {
pr.ptr = C.NewProcessor()
}

func GetDefault() (id int, name string) {
var default = C.GetDefault(pr.ptr)
id = int(default.materialId)
name = C.GoString(default.name)
return
}

当我将匹配的库复制到 build/文件夹下时,这工作得很好。

我正在尝试将其作为一个 go gettable 库,它可以在 linux 和 darwing 架构上运行。

我遇到的问题是告诉编译器为匹配的 GOOS 和 GOARCH 选择正确的库。

我试过像下面这样的文件夹结构

build/darwing/libprocessing_lib.so
build/linux/libprocessing_lib.so

并如下修改LDFLAGS

// #cgo LDFLAGS: -L${SRCDIR}/build/${GOOS} -lprocessing_lib

但是它无法识别 ${GOOS} 并将其替换为正确的值。

有没有办法实现这个动态库拾取功能?

最佳答案

通过查看自己的 go 源代码找到了一种无需创建多个文件即可实现此目的的简单方法 cgo

// #cgo darwin LDFLAGS: -L${SRCDIR}/build/darwin -lprocessing_lib
// #cgo linux LDFLAGS: -L${SRCDIR}/build/linux -lprocessing_lib

如果需要,我们也可以像下面这样传递架构

// #cgo darwin,arm64 LDFLAGS: -L${SRCDIR}/build/darwin -lprocessing_lib

关于go - 使用 CGO 动态选择正确的操作系统和处理器架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51276602/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com