我对 Linux 还是个新手。
我在 Linux 环境中构建了一个应用程序,它使用基于 cgo ( https://github.com/mattn/go-gtk/) 的 gtk 库。该应用程序在其 native 环境(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=$1 GOARCH=$2 CGO_ENABLED=1 go build $3
$1 是 darwin,$2 是 amd64($3 是我的应用程序的路径)。
由于错误似乎来 self 导入的库,我不确定如何修复它。我还读到交叉编译 cgo 并没有真正起作用,因为它依赖于原生 macos 的东西,所以它需要在 mac 上构建。这是真的吗?或者我可以做些什么来让它在我的环境中工作?
我也有点困惑,因为似乎大多数讨论这个主题的人都在谈论 go pre 1.5,如果我理解正确的话,它在交叉编译方面完全不同。
谢谢
最佳答案
感谢 JimB 的评论,我现在能够在 linux 上为 darwin 成功编译我的代码。
我需要的是一个 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
编译我的代码.
我的一些程序编译成功,一些在链接时抛出错误,但我想这是另一个问题,所以我将在交叉编译过程中将这个问题标记为已解决。
关于linux - cgo (for darwin) 的交叉编译失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34084597/