Compiling your go code into a binary is pretty simple:
$ go install <package>
This will build the binary for your current OS and architecture. But compiling binaries for other operating systems and even architectures is also possible. You just need to modify a few environment variables:
- GOARCH – the architecture, e.g. amd64, 386 or arm
- GOOS – the operating system – linux, darwin or windows
Building the compiler first …
You can take a look at the output of
go env to see what your current configuration looks like. But to actually cross compile, you need to first build the compilers.
With Mac OS / Homebrew, just install go with
--cross-compile-all. See the recipe for details.
If you have installed Go from source, just set the variables and call
./all.bash in the
src folder for each
GOOS combination you need.
This guide might help if you are totally lost.
Building your project …
bash: ./gobinfile: cannot execute binary file
Back to our project. Similar to building the compiler you just need to modify the environment variables and call go build as before. Go will now create a subfolder in
./bin/ matching your os/arch combination. Here you will find your crosscompiled binary. Obvisouly you can also pass in the varis in one line:
$ GOARCH=arm GOOS=linux go build helloworld
PS: If you want to crosscompile for ARM v5/v6 CPU (e.g. for the raspberry pi), you need to set
GOARM=5 to use different set of operations for floating point math.