Cross Compiling C Code for ARM

Hello! In this brief post I will share how you can cross compile some simple C code for running on an ARM based device. I have a desire to write a few simple things in C for tinkering with OpenBMC on Barreleye G2 and figured I would share my process.

The Build Box

To build this program I’m going to use a freshly built Ubuntu 16.04.3 VM, that way I know for sure what dependencies are needed. My host system is also running Ubuntu 16.04.3 and I’m using Virt Manager as an interface to libvirt that is serving my VMs via QEMU and KVM.

Starting the install

After a few minutes I am ready to go!

The Codes

The code for this is pretty simple, I’ll just build the ol’ hello world!

#include <stdio.h>

int main() {
  printf("Hello, ARM!\n");
  return 0;

I’ll SSH into my VM so that my commands are easier to follow. I start by creating the source file with vim.

Building and Testing

Ubuntu offers many pre-built cross compilers. All you need to do is run a sudo apt update to ensure your package listing is up to date and a sudo apt install -y build-essential gcc-arm-linux-gnueabi will get you what you need.

To build, I’ll use the arm-linux-gnueabi-gcc compiler instead of just gcc. I’ll verify it was indeed for an ARM machine with readelf, then scp it from the VM to my host system.

Next, to test it, I’ll scp it over to my OpenBMC system, ssh into it and give it a go!

There it is! I’ve successfully cross compiled a simple program to run on an ARM machine. If you have any questions about this please let me know in the comments!

2 thoughts on “Cross Compiling C Code for ARM”

    1. scp is secure copy and the “root@” is the same like in ssh: username and host/ip of the arm device.
      You need to know the IP or hostname of the device to connect and copy the file to it.
      If you use a usb->uart adapter you need to use other tools to get the file to the device.
      This should be installed otherwise try googling “scp” to learn how secure copy works.

Leave a Reply