cgo (for darwin) 的交叉编译失败

Cross-compilation of cgo (for darwin) fails

我是新手,一般来说甚至 Linux。

我在 Linux 环境中构建了一个应用程序,它使用基于 cgo (https://github.com/mattn/go-gtk/) 的 gtk 库。该应用程序在其本地环境(linux 64 位)中构建良好,但是当我尝试为 darwin 64 位编译时,我得到以下结果:

# net
could not determine kind of name for C.AI_MASK
# net
could not determine kind of name for C.AI_MASK

我用来构建的命令行:

env GOOS= GOARCH= CGO_ENABLED=1 go build 

其中 $1 是 darwin,$2 是 amd64($3 是我的应用程序的路径)。

由于错误似乎来自我导入的库,我不确定如何修复它。我还读到 cross 编译 cgo 并没有真正起作用,因为它依赖于原生 macos 东西,所以它需要构建在 mac 上。这是真的吗?或者我可以做些什么让它在我的环境中工作?

我也有点困惑,因为似乎 most 讨论这个主题的人都在谈论 go pre 1.5,如果我理解的话,它在 cross-compiling 方面完全不同正确。

谢谢

感谢 JimB 的评论,我现在能够在 linux 上为达尔文成功编译我的代码。

我需要的是 osx 工具链,例如 github.com/tpoechtrager/osxcross

然后我通过 env OSXCROSS_NO_INCLUDE_PATH_WARNINGS=1 MACOSX_DEPLOYMENT_TARGET=10.6 CC=o64-clang CXX=o64-clang++ GOOS=darwin GOARCH=amd64 CGO_ENABLED=1 go build -v mywork/myprogram.

编译了我的代码

我的一些程序编译成功,一些在链接时抛出错误,但我想这是另一个问题,所以我将在 cross-compilation 之前将此问题标记为已解决。