45

Suppose I'm a primarily Linux user, but I'm developing an application in Go that I want to be cross platform. I've searched around, but I can't seem to find information to absolve the following:

  1. If I go install a binary on my amd64 Ubuntu system, will it also work on anyone else's 64-bit Ubuntu/Debian system?
  2. How can I use go install to build an x86_64 binary that will also run out-of-the-box on 32-bit Debianlikes?
  3. If I must use Windows to make a binary which will run on Windows, how can I also ensure that even if my Windows system is 64-bit the executable will be built for x86_64?

My questions in effect boil down to, "how static/portable is go's linker/compiler?"

5
  • 1
    I'm not sure what you're asking. Binaries are portable between systems with the same OS and architecture. Go builds the binary for your host GOOS and GOARCH unless you specify otherwise. You can't take a 64bit binary and run it on a 32bit system.
    – JimB
    Commented Nov 23, 2015 at 14:04
  • 1
    That hasn't been my experience with creating binaries that are meant to be cross platform.
    – cat
    Commented Nov 23, 2015 at 14:05
  • 3
    To answer your question: "Not at all." Simply because this is impossible to do. No compiler/linker/loader/toolchain can do this. Google cross compilation which is trivial with Go.
    – Volker
    Commented Nov 23, 2015 at 14:06
  • If that hans't been your experience, then you need to show us the problem you're having. The question "how static/portable is go's linker/compiler?" doesn't make much sense.
    – JimB
    Commented Nov 23, 2015 at 15:02
  • 2
    Off topic. This tool easy your life github.com/mitchellh/gox
    – holys
    Commented Nov 25, 2015 at 14:52

1 Answer 1

51
  1. Yes it will; this is true of basically all binaries compiled for 64-bit Linux, not just those written in Go (except for shared libraries, which Go doesn't rely on)
  2. You can set the GOOS and GOARCH environment variables before building: GOOS=windows GOARCH=386 go build (or go install or whatever), etc
  3. By default a binary will be built for the system you're running, but this isn't necessary - see 2

Not the answer you're looking for? Browse other questions tagged or ask your own question.