我只能访问动态链接的共享库的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架构上运行。
我遇到的问题是告诉go编译器为匹配的GOOS和GOARCH选择正确的库。
我尝试使用以下文件夹结构
build/darwing/libprocessing_lib.so
build/linux/libprocessing_lib.so
并如下修改了LDFLAGS
// #cgo LDFLAGS: -L${SRCDIR}/build/${GOOS} -lprocessing_lib
但是它不能识别$ {GOOS}并用正确的值替换。
是否可以实现此动态库提取功能?
答案 0 :(得分:1)
答案 1 :(得分:1)
通过查看自身的go源代码cgo
,找到了一种无需创建多个文件即可实现此目标的简便方法// #cgo darwin LDFLAGS: -L${SRCDIR}/build/darwin -lprocessing_lib
// #cgo linux LDFLAGS: -L${SRCDIR}/build/darwin -lprocessing_lib
如果需要,我们也可以通过架构,如下所示
// #cgo darwin,arm64 LDFLAGS: -L${SRCDIR}/build/darwin -lprocessing_lib