Nic*_*las 5 linux darwin go cgo
我对 Go 甚至 Linux 都很陌生。
我在 Linux 环境中构建了一个应用程序,它使用基于 cgo 的 gtk 库(https://github.com/mattn/go-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
Run Code Online (Sandbox Code Playgroud)
我用来构建的命令行:
env GOOS=$1 GOARCH=$2 CGO_ENABLED=1 go build $3
Run Code Online (Sandbox Code Playgroud)
其中 $1 是 darwin,$2 是 amd64($3 是我的应用程序的路径)。
由于错误似乎来自我导入的库,因此我不确定如何修复它。我还读到,交叉编译 cgo 并不能真正工作,因为它依赖于本机 macOS 的东西,因此需要在 mac 上构建。这是真的吗?或者我可以做些什么来让它在我的环境中发挥作用?
我也有点困惑,因为似乎大多数讨论这个主题的人都在谈论 go pre 1.5,如果我理解正确的话,在交叉编译方面这是完全不同的。
谢谢
感谢 JimB 的评论,我现在能够在 darwin 的 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
。
我的一些程序编译成功,一些程序在链接时抛出错误,但我想这是另一个问题,所以我将把这个问题标记为就交叉编译而言已解决。
归档时间: |
|
查看次数: |
4645 次 |
最近记录: |