【解决一个小问题】macbook m2 上交叉编译 gozstd

发布时间 2023-05-31 12:13:35作者: ahfuzhang

作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!


已知 zstd 是一个优秀的压缩库,gozstd封装了这个库。
一开始在 macbook m2 芯片的笔记本上开发包含了 gozstd 的程序时,一切正常。
发布的时候,需要分别编译 linux+arm64 和 linux+amd64 两种版本。

一开始直接交叉编译的时候发生这样的错误:

CGO_ENABLED=0  GOOS=linux  GOARCH=amd64 \
          go build -o cmd/cli/redirector_linux cmd/cli/main.go
# github.com/valyala/gozstd
../../../../../go/pkg/mod/github.com/valyala/gozstd@v1.20.1/stream.go:14:48: undefined: DefaultCompressionLevel
../../../../../go/pkg/mod/github.com/valyala/gozstd@v1.20.1/stream.go:31:59: undefined: CDict

最终找到解决办法如下:

1.安装用于交叉编译的 gcc:

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

2.编译 linux + arm64 的命令行为:

env CC=aarch64-linux-gnu-gcc CGO_ENABLED=1  GOOS=linux  GOARCH=arm64 \
	  go build -o cmd/cli/redirector_linux_arm cmd/cli/main.go

3.编译 linux + amd64 的命令行为:

	env CC=x86_64-linux-gnu-gcc CGO_ENABLED=1  GOOS=linux  GOARCH=amd64 \
	  go build -o cmd/cli/redirector_linux_amd cmd/cli/main.go