如何用cgo从linux/amd64交叉编译到darwin/arm64?

林聖達*_*林聖達 13 linux macos cross-compiling go

darwin/arm64我正在尝试在 上进行交叉编译linux/amd64,当我使用 构建代码时出现以下错误CGO_ENABLED=1,我理解该错误,但我不知道如何解决。

我的代码必须启用CGO_ENABLED功能才能编译。

错误信息:

GOOS=darwin GOARCH=arm64 CGO_ENABLED=1 CC=gcc go build -o dist/darwin-arm64 cmd/main.go
# runtime/cgo
gcc: error: arm64: No such file or directory
gcc: error: unrecognized command line option '-arch'
make: *** [makefile:6: darwin] Error 2
Run Code Online (Sandbox Code Playgroud)

主机系统:

Linux 83433d127edb 5.13.0-28-generic #31~20.04.1-Ubuntu SMP Wed Jan 19 14:08:10 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

运行环境:

GO111MODULE=""                                                                                                                       
GOARCH="amd64"                                                                                                                       
GOBIN=""                                                                                                                             
GOCACHE="/root/.cache/go-build"                                                                                                      
GOENV="/root/.config/go/env"                                                                                                         
GOEXE=""                                                                                                                             
GOEXPERIMENT=""                                                                                                                      
GOFLAGS=""                                                                                                                           
GOHOSTARCH="amd64"                                                                                                                   
GOHOSTOS="linux"                                                                                                                     
GOINSECURE=""                                                                                                                        
GOMODCACHE="/root/go/pkg/mod"                                                                                                        
GONOPROXY=""                                                                                                                         
GONOSUMDB=""                                                                                                                         
GOOS="linux"                                                                                                                         
GOPATH="/root/go"                                                                                                                    
GOPRIVATE=""                                                                                                                         
GOPROXY="https://proxy.golang.org,direct"                                                                                            
GOROOT="/usr/lib/go-1.18"                                                                                                            
GOSUMDB="sum.golang.org"                                                                                                             
GOTMPDIR=""                                                                                                                          
GOTOOLDIR="/usr/lib/go-1.18/pkg/tool/linux_amd64"                                                                                    
GOVCS=""                                                                                                                             
GOVERSION="go1.18"                                                                                                                   
GCCGO="gccgo"                                                                                                                        
GOAMD64="v1"                                                                                                                         
AR="ar"                                                                                                                              
CC="gcc"                                                                                                                             
CXX="g++"                                                                                                                            
CGO_ENABLED="1"                                                                                                                      
GOMOD="/home/worker/go.mod"                                                                                                          
GOWORK=""                                                                                                                            
CGO_CFLAGS="-g -O2"                                                                                                                  
CGO_CPPFLAGS=""                                                                                                                      
CGO_CXXFLAGS="-g -O2"                                                                                                                
CGO_FFLAGS="-g -O2"                                                                                                                  
CGO_LDFLAGS="-g -O2"                                                                                                                 
PKG_CONFIG="pkg-config"                                                                                                              
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build1206945591=/tmp/go-build -gno-record-gcc-switches"
Run Code Online (Sandbox Code Playgroud)

mar*_*elo 2

有可能,您需要安装 gcc 工具链以交叉编译到arm64.

我知道 Debian/Ubuntu 有适用于 Windows 以及其他 Linux 架构的交叉编译工具链(例如:packagesgcc-aarch64-linux-gnulibc6-dev-arm64-crossgcc-mingw-w64-x86-64

我不确定是否有darwin可用的工具链。