We can't find the internet
Attempting to reconnect
Something went wrong!
Hang in there while we get back on track
When you use SQLite in your Go program, you are forced to use Cgo. While that works great, that breaks one of the nicest features of the Go toolchain: cross compilation.
Turns out there is actually a solution for this.
First, you need to install the musl-cross
package (and we're assuming you're running this on macOS). musl-cross
is a cross compilation toolchain.
brew install FiloSottile/musl-cross/musl-cross
Once you have this installed, you can compile for Linux like this:
CC=x86_64-linux-musl-gcc CXX=x86_64-linux-musl-g++ GOARCH=amd64 GOOS=linux CGO_ENABLED=1 \
go build -ldflags "-linkmode external -extldflags -static"
By updating the CC
and CXX
environment variables to point to the musl-cross
toolchain, you can now cross compile with Cgo enabled.
You can also do the same when you want to cross compile to Windows. The instructions for that can be found here.
If this post was enjoyable or useful for you, please share it! If you have comments, questions, or feedback, you can email my personal email. To get new posts, subscribe use the RSS feed.