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

标签 linux go darwin cgo

我对 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/

相关文章:

linux - 如何对字符串中的数字使用正则表达式?

go - yaml:解码错误:无法将字符串解码为时间。Golang 中的持续时间

logging - 如何将自定义(非 const)字符串信息添加到日志格式?

go - 类型没有字段或方法读取(但它有)

iphone - 在 64 位操作系统中构建 odcctools

macos - 在 MacOS 上的 golang 中使用带有 http.Get 的自签名 SSL

linux - Code::Blocks 在 'adding files recursively' 之后崩溃到一个空项目

linux - 在 Sqlplus 中运行 Linux 函数

linux - 我可以使用本地脚本通过 SSH 连接到多个服务器(从本地到 servA,然后从 servA 到 servB)吗?

xcode - 为 Xcode 8.3+ 创建自定义平台和 SDK