Arsfy's Blog

Golang 啟用 CGO 時進行交叉編譯

如果應用程式內包含 go-sqlite3 這類必須啟用 CGO 的包,關閉 CGO 交叉編譯將會無法執行。

Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub

解決方案

  1. 使用 brew 安裝 musl-cross
brew install FiloSottile/musl-cross/musl-cross
  1. 啟用 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

#Golang #Utilities