当我尝试将golang项目从OSX交叉编译到Linux时,我收到以下错误消息:
this.router.events
.pipe(
filter(e => e instanceof NavigationEnd)
)
.subscribe( (navEnd:NavigationEnd) => {
console.log(navEnd.urlAfterRedirects);
});
并且编译中止。
这是我尝试构建应用程序的方式:
# runtime/cgo
ld: unknown option: --build-id=none
clang: error: linker command failed
我也尝试使用gox:
CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build
但它仍然无法正常工作。
如果我不使用 gox -os="linux"
标签,并且一切都能按预期工作,并且能够在OSX计算机上成功构建/运行我的项目。
答案 0 :(得分:3)
我可以确认命令
$env CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -v main.go
与MacOS X High Sierra上的“ Hello World” main.go
文件完全兼容,而无需安装其他软件(另请参见here)。
正如注释中已经指出的那样,您可能正在尝试使用cgo
进行编译,并且显然缺少工具链和/或标题的一部分,这就是链接器引发错误的原因。请提供可接受的example,否则我们将无法为您提供帮助。
答案 1 :(得分:1)
您需要安装适当的工具链才能做到这一点。
为了为与您构建不同的体系结构构建二进制文件 主机,您不仅需要交叉编译器,还需要 完善的工具链,这在您创建时可能真的很痛苦 可能是发现的。
几种方法:
在虚拟机中使用适当的Linux发行版,例如 VirtualBox。如果您只想在Linux上为Linux / i386构建二进制文件 MacOSX / x86_64主机,在我看来,这是最简单,最安全和 最干净的解决方案。当然,它不是交叉编译器,但是 可以使用,它还有一个额外的优势,就是您可以实际测试自己的 可执行文件。
使用诸如crosstool-NG之类的脚本(原始脚本的后代 crosstool)自动建立工具链-绝对容易 而不是自己构建它,尽管您可能不得不为 稍旧的编译器版本。