英文:
Cross compiling: "user: Current not implemented on linux/amd64"
问题
我在一个linux/amd64的机器上编译了以下Go程序:
package main
import (
"fmt"
"os/user"
)
func main() {
fmt.Println(user.Current())
}
这个程序可以正常工作。但是当我从Mac机器上进行交叉编译,并在我的linux机器上运行该程序时,我得到了以下错误:
user: Current not implemented on linux/amd64
我该如何进行交叉编译并使用os/user
包中的Current
函数?
编辑1:
我应该补充说明,这些是我在Mac机器上设置交叉编译的指令:https://code.google.com/p/go-wiki/wiki/WindowsCrossCompiling
编辑2:为windows/386进行交叉编译可以正常工作。
英文:
I compile the following Go program on a linux/amd64 box:
package main
import (
"fmt"
"os/user"
)
func main() {
fmt.Println(user.Current())
}
This works fine. But when I cross compile it from a Mac box, I get the following error when I run that program on my linux box:
user: Current not implemented on linux/amd64
How can I cross compile and use the Current function in package os/user
?
Edit 1:
I should add that these are the instructions I've used to setup cross compiling on my Mac box: https://code.google.com/p/go-wiki/wiki/WindowsCrossCompiling
Edit 2: cross compiling for windows/386 works fine.
答案1
得分: 19
这是由于问题 6376:在从 Linux-amd64 交叉编译到 darwin-amd64 时,user.Current 在 darwin-amd64 上引发 panic:
>os/user 依赖于 cgo,在交叉编译时会禁用 cgo,因此这是预期的。
>如果你使用 os/user,你必须在 macOS 上进行本地编译。
>即使我们启用了交叉编译的 cgo 支持,我怀疑每个人都在他们的 Linux 机器上拥有一个可用的 macOS 交叉工具链。
>状态:按设计工作
英文:
This is due to Issue 6376: user.Current panic in darwin-amd64 when crosscompiled from linux-amd64:
>os/user relies on cgo, and cgo is disabled for cross compiling,
thus this is expected.
>if you use os/user, you must compile natively on OS X.
>even if we enable cross compilation cgo support, I doubt everybody have
a working OS X cross toolchain on their linux machine.
>Status: WorkingAsIntended
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论