交叉编译
树莓派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