Ubuntu has a few cross compile toolchains available, for example:

sudo apt install gcc-arm-linux-gnueabi # for arm chips
sudo apt install gcc-arm-linux-gnueabihf # for arm chips with floating point registers

Crosstool-NG is a great help in getting the tougher cross compile toolchains built. I was targeting a specific ARM 926EJ-S chipset, and the vendor had their own toolchain.

Trying to cross compile on newer versions of ubuntu was a headache though. I would get “FATAL: kernel tool old” errors from the executable on the target system, and the autotools configure option to limit kernel version (–enable-kernel=…) did not fix it.

In the end, I was able to build zlib and openssl and libwebsockets statically, with a Crosstool-NG toolchain on an older ubuntu, but had to deal with this glibc bug by explicitly specifying the system lib folder, or getaddrinfo, gethostbyname, and all other NSS based functions just plain old failed (lost some hair to that fine feature – cmon RMS and Drepper, get along better so your code doesn’t stink…):

LD_LIBRARY_PATH=/lib ./my_static_app

Details as usual on the wiki. Onwards.

Leave a Reply