【发布时间】:2018-12-07 23:47:27
【问题描述】:
当我尝试将我的 golang 项目从 OSX 交叉编译到 Linux 时,我收到以下错误消息:
# runtime/cgo
ld: unknown option: --build-id=none
clang: error: linker command failed
编译中止。
这就是我尝试构建应用程序的方式:
CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build
我也尝试过使用 gox:
gox -os="linux"
但还是不行。
如果我不使用GOOS=linux 标签,一切都会按预期工作,并且我能够成功地为/在我的 OSX 机器上构建/运行我的项目。
【问题讨论】:
-
如果没有minimal reproducible example,我们只能猜测。声明
Image的文件的构建约束是什么? -
Image位于使用 cgo 的文件中,而您没有使用 cgo 进行编译。您是否还安装了完整的工具链以将 C 代码交叉编译到 Linux? -
如果您现在使用的是
CGO_ENABLED=1,并且源代码中没有构建约束,但仍然没有,那么文件的名称是什么? -
cgo 之前没有启用,因为您需要显式启用它以进行交叉编译。该消息是因为您没有使用正确的工具链来定位 linux。如果您有合适的工具,您可以使用
CC_FOR_TARGET和CXX_FOR_TARGET来指定它们(在docs here 中查找“交叉编译”)。在 docker 容器中构建它可能比尝试运行交叉编译要容易得多。 -
这不是一个真正的初学者主题,但您需要从安装 linux 的交叉编译器开始,可能是 gcc(可能还有任何缺少的标头)。在 docker 容器中构建会“正常工作”,所以这是我的建议。关于如何使用 docker 有大量的资源。
标签: go compiler-errors compilation