交叉编译

树莓派cmd

CGO_ENABLED=0 GOOS=linux GOARCH=arm go build xxx.go

问题

如果依赖库使用了如C、C++,那么交叉编译的时候是需要打开CGO_ENABLED=1,并制定CC参数(cross compiler)

这里以macos darwin为例,我要在mac上写好代码,要编译后调试逻辑

  • 使用docker放到对应环境中编译,需要安装docker,建议,避免环境不一致的问题
docker run --rm -v `pwd`:/code golang:1.18-rc bash -c "ls /code && ls /code/deploy && cd /code && /usr/local/go/bin/go build -o /code/deploy/20220905235741/yogo ./"`
  • 使用macos-cross-toolchains
brew tap messense/macos-cross-toolchains
# install x86_64-unknown-linux-gnu toolchain
brew install x86_64-unknown-linux-gnu
# install aarch64-unknown-linux-gnu toolchain
brew install aarch64-unknown-linux-gnu

# build
GOOS=linux GOARCH=amd64 CGO_ENABLED=1 CC=x86_64-unknown-linux-gnu-gcc go build
  • 使用musl(类似glibc),需要运行环境安装musl库,如apt install musl,否则会提示no such file
brew install FiloSottile/musl-cross/musl-cross

GOOS=linux GOARCH=amd64 CGO_ENABLED=1 CC=x86_64-linux-musl-gcc go build