I've got caught in the not-so-sunny world of cross-compilation.
I'm trying to compile a simple hello world application for my BeagleBone Black (which runs a TI Cortex-A8 processor).
First of all, I compiled and ran successfully the hello world application on x86 with gcc
Then I changed my compilation settings to the following:
arm-linux-gnueabi-gcc -c -O0 -g3 -Wall main.c -o bin/obj/main.o
arm-linux-gnueabi-gcc bin/obj/main.o -o bin/hello_world
I transferred the file via SCP to the BeagleBone, and set executable permissions with chmod +x hello_world
Upon running it (./hello_world
), my only response is:
-bash: ./hello_world: No such file or directory
The output of file
matches that of /sbin/init
as I would expect:
$ file hello_world
hello_world: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x24b659b7a41fe043a6f4649d4ebfb5e692ebf0c7, not stripped
$ file /sbin/init
/sbin/init: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=0xd21f6957ec031a27d567b3d5e6aa14b9e0c30c37, stripped
The result of ldd
is:
$ ldd hello_world
not a dynamic executable
I tried adding a suitable platform and CPU type, changing my compilation to:
arm-linux-gnueabi-gcc -c -O0 -g3 -Wall -march=armv7-a -mtune=cortex-a8 main.c -o bin/obj/main.o
arm-linux-gnueabi-gcc bin/obj/main.o -o bin/hello_world
This initially started giving me a new error: Text file busy
, but I have since been unable to get that error back again as it now returns No such file or directory
. I'm guessing that particular attempt was just a bad transfer or something.