英文:
Cross compile CGO app on darwin for linux
问题
我在尝试将在OS X上编译的Go应用交叉编译为linux/amd64平台时遇到了问题。该应用程序使用libvips,通过这个vips go包来使用。因此,它使用CGO并且需要使用CGO支持进行编译。
我使用Go 1.4,并运行以下构建命令:
GOOS=linux GOARCH=amd64 CGO_ENABLED=1 go build
但是最终出现了链接器错误:
clang: error: linker command failed with exit code 1 (use -v to see invocation)```
我猜想我可能需要添加某种`-ldflags`参数,但不确定。
是否可以以这种方式交叉编译CGO应用程序,或者我需要在目标系统上进行本地构建以避免问题和麻烦?
<details>
<summary>英文:</summary>
I'm having issues trying to cross-compile a Go app on OS X to run on linux/amd64. The app in question is using [libvips](http://www.vips.ecs.soton.ac.uk/index.php?title=VIPS) via this [vips go package](https://github.com/DAddYE/vips). As such, it is using CGO and needs to be compiled with CGO support.
I'm on Go 1.4 and running the following build command
`GOOS=linux GOARCH=amd64 CGO_ENABLED=1 go build`
but end up with a linker error
```ld: unknown option: --build-id=none
clang: error: linker command failed with exit code 1 (use -v to see invocation)```
I'm assuming I probably need to add some kind of `-ldflags` argument but am not sure.
Is it possible to cross-compile CGO apps in this manner yet, or do I need to do a native-build on the target system to avoid issues and headaches?
</details>
# 答案1
**得分**: 1
请看一下[gonative](https://github.com/inconshreveable/gonative)。它可以让你交叉编译cgo代码(只要你只使用标准库)。
另一种方法是使用Docker编译Linux二进制文件。
<details>
<summary>英文:</summary>
Have a look at [gonative](https://github.com/inconshreveable/gonative). this allows you to cross-compile cgo code (as long as you are just using the stdlib).
Another approach would be to compile the linux binary using docker.
</details>
# 答案2
**得分**: 0
快进到2022年,使用Docker来进行跨平台编译CGO应用程序是您最好且最干净的选择。构建包含正确跨平台编译器和C库的Docker容器。这是我使用Docker进行Cgo应用程序的交叉编译的方法。这是包含Dockerfile的存储库。
<details>
<summary>英文:</summary>
Fast-forwarding to 2022, using docker for cross-compiling CGO apps to other platforms is your best and cleanest choice. Build docker containers that contain the correct cross-platform compiler and C libraries. Here is how I [cross-compile my Cgo applications with Docker](https://dh1tw.de/2019/12/cross-compiling-golang-cgo-projects/). Here is the [repo with the dockerfiles](https://github.com/dh1tw/remoteAudio-xcompile).
</details>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论