【发布时间】:2015-04-24 06:43:51
【问题描述】:
我在尝试在 OS X 上交叉编译 Go 应用程序以在 linux/amd64 上运行时遇到问题。有问题的应用程序通过此vips go package 使用libvips。因此,它使用的是 CGO,需要在 CGO 支持下编译。
我正在使用 Go 1.4 并运行以下构建命令
GOOS=linux GOARCH=amd64 CGO_ENABLED=1 go build
但最终会出现链接器错误
ld: unknown option: --build-id=none
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我假设我可能需要添加某种 -ldflags 参数,但不确定。
是否有可能以这种方式交叉编译 CGO 应用程序,还是我需要在目标系统上进行本地构建以避免问题和麻烦?
【问题讨论】:
-
我没有 OSX,但它看起来像是一个糟糕的 ld 版本或其他东西。我想说的是启动一个 vm(qemu 可以在 mac 上工作吗?)然后在那里进行编译会更容易。
-
是的,我可以通过虚拟机进行本地编译,当然,整个过程可以自动化。我只是想努力解决问题,看看我是否可以像使用非 CGO golang 程序一样,一次完成所有本地交叉编译
-
我会尝试看看您是否可以获得更新/不同版本的 clang 和 ld 但也许其他人会知道得更好。
-
--build-id是 GNU ld 识别的命令行参数(在 Linux 上使用),所以看起来你在这里使用的是 Mac 工具链。您可能需要安装 Linux 交叉编译器工具链才能使其工作,但我自己从未在 MacOS 上做过。 -
@cpjolicoeur 有点晚了,但也许我可以帮助其他人。在 linux 上(本机)使用 clang 时,我总是遇到此链接器错误,解决方案(对我而言)是在这种情况下覆盖
CC和CXX环境变量以使用 gcc。
标签: linux go cross-compiling darwin cgo