Go: cannot execute binary file: Exec format error
In an earlier blog post I mentioned that I’d been building an internal application to learn a bit of Go and I wanted to deploy it to AWS.
Since the application was only going to live for a couple of days I didn’t want to spend a long time build up anything fancy so my plan was just to build the executable, SSH it to my AWS instance, and then run it.
My initial (somewhat naive) approach was to just build the project on my Mac and upload and run it:
$ go build
$ scp myapp ubuntu@aws...
$ ssh ubuntu@aws...
$ ./myapp
-bash: ./myapp: cannot execute binary file: Exec format error
That didn’t go so well! By reading Ask Ubuntu and Dave Cheney’s blog post on cross compilation I realised that I just needed to set the appropriate environment variables before running go build.
The following did the trick:
env GOOS=linux GOARCH=amd64 GOARM=7 go build
And that’s it! I’m sure there’s more sophisticated ways of doing this that I’ll come to learn about but for now this worked for me.
About the author
I'm currently working on short form content at ClickHouse. I publish short 5 minute videos showing how to solve data problems on YouTube @LearnDataWithMark. I previously worked on graph analytics at Neo4j, where I also co-authored the O'Reilly Graph Algorithms Book with Amy Hodler.