cgo(对于darwin)的交叉编译失败

时间:2015-12-04 09:12:20

标签: linux go darwin cgo

我一般都是新手,甚至是Linux。

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

# 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是我的应用程序的路径)。

由于错误似乎来自我导入的lib,我不知道如何解决它。我还读到交叉编译cgo并不真正起作用,因为它依赖于原生的macos东西所以它需要在mac上构建。这是真的还是我可以做些什么让它在我的环境中工作?

我也有些困惑,因为看起来大多数人讨论这个问题都在讨论前1.5版本,如果我理解正确的话,在交叉编译方面则完全不同。

由于

1 个答案:

答案 0 :(得分:2)

由于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编译了我的代码。

我的一些程序编译成功,有些程序会在链接时抛出错误,但我想这是另一个问题所以我会将此问题标记为已解决,只要交叉编译即可。