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



我正试图在linux/amd64上交叉编译darwin/arm64,当我用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

主机系统:

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

Go环境:

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"

您可能需要安装gcc工具链来交叉编译到arm64

我知道Debian/Uubuntu有针对Windows以及其他Linux体系结构的交叉编译工具链(例如:包gcc-aarch64-linux-gnulibc6-dev-arm64-crossgcc-mingw-w64-x86-64(。

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

相关内容

  • 没有找到相关文章

最新更新