无法从OSX交叉编译到Linux

时间:2018-06-28 20:13:09

标签: go compiler-errors compilation

当我尝试将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计算机上成功构建/运行我的项目。

2 个答案:

答案 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)自动建立工具链-绝对容易   而不是自己构建它,尽管您可能不得不为   稍旧的编译器版本。

Cross compiler for linux on mac os x