gpt4 book ai didi

go - 交叉编译共享库

转载 作者:IT王子 更新时间:2023-10-29 00:40:07 24 4
gpt4 key购买 nike

我想知道是否可以(如果可以:如何)使用 Go 交叉编译共享库。假设我有这段代码:

package main

import "C"

//export DoubleIt
func DoubleIt(x int) int {
return x * 2
}

func main() {}

src/doubler/main.go 中。在 Mac 上我可以运行

go build -o libdoubler.dylib -buildmode=c-shared doubler

获取名为 libdoubler.dylib 的共享库。在 linux 上类似,只是扩展名 .so.

现在我想使用 Linux 作为主要平台来构建我的库(适用于 Mac 和 Windows)。我有哪些选择?

GOOS 设置为 darwin 并在 linux 上运行上面的代码,我得到了

can't load package: package doubler: no buildable Go source files in /home/patrick/Desktop/go/src/doubler

有什么想法吗?

最佳答案

您面临的问题实际上不是关于编译共享库或可执行文件,而是关于使用 cgo 并尝试交叉编译。 (不过,如果你想要一个库,而不是一个可执行文件,包名不应该是 main。)

交叉编译时,cgo默认是关闭的。如果您添加环境变量 CGO_ENABLED=1,那么您的示例将起作用:

CGO_ENABLED=1 GOOS=darwin go build -o libdoubler.dylib -buildmode=c-shared doubler

请记住,在交叉编译时使用 cgo 会很麻烦。您需要确保目标平台的 C 库已在您的主机上准备就绪。如果不是真的需要,请远离cgo。如果必须,那么你可以考虑在目标机器上编译,而不是处理与 cgo 交叉编译的维护。

关于go - 交叉编译共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43710987/

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