Golang 啟用 CGO 時進行交叉編譯
如果應用程式內包含 go-sqlite3 這類必須啟用 CGO 的包,關閉 CGO 交叉編譯將會無法執行。
Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub
解決方案
- 使用 brew 安裝 musl-cross
brew install FiloSottile/musl-cross/musl-cross
- 啟用 CGO 並指定編譯套件
- -static 指定使用靜態連結 musl,不依賴系統環境
CGO_ENABLED=1 GOOS=linux GOARCH=amd64 CC=x86_64-linux-musl-gcc CXX=x86_64-linux-musl-g++ go build -ldflags="-linkmode external -extldflags '-static'" .
完成
file: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, BuildID[sha1]=xxxxxxxxxxxxx, with debug_info, not stripped