3
votes

I have written simple Hello world program and compiled it with gcc-arm-linux-gnueabi compiler. It compiles well but when i try to execute it on ARM machine it complains "no such file or directory". I think gcc-arm-linux-gnueabi is for embedded Linux only due to e(mbedded)abi. Is it different from ARM Linux ABI?

Please help me to solve this problem

code is here

#include "stdio.h"

int main(void) {
  printf("Hello world !\n");
  return 0;
}

compiled as

arm-linux-gnueabi-gcc -Wall -o crosscomp hello.c

When i execute this crosscomp on target ARM machine error is crosscomp no such file or dir

EDIT When I was using arm-linux-gnueabi-gcc the entry point was not matching with the target machine entry point (readelf -l crosscom) but when I compiled with aarch64-linux-gnu-gcc entry point matched with target machine. But now error becomes permission denied on ./crosscomp. I tried with sudo which says crosscomp: no such command.

Note I posted same question on askubuntu https://askubuntu.com/questions/904685/cross-compilation-for-arm-error-no-such-file-or-directory but got no response.

The output of readelf is as below

ELF Header:

 Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF64
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           AArch64
  Version:                           0x1
  Entry point address:               0x400470
  Start of program headers:          64 (bytes into file)
  Start of section headers:          4488 (bytes into file)
  Flags:                             0x0
  Size of this header:               64 (bytes)
  Size of program headers:           56 (bytes)
  Number of program headers:         8
  Size of section headers:           64 (bytes)
  Number of section headers:         29
  Section header string table index: 26
1
what's the output of ls -l crosscomp ?cleblanc
Ok, in short this error is because the toolchain is not meant for Target ARM processor, you need to use the exact same toolchain which is used to compile the rootfs for target board.Gaurav Pathak
Thanks Gaurav. Any suggestion to discover that toolchainincompetent
You can refer this link. From any binary on that target rootfs, maybe busybox. If the comments are not stripped out.Gaurav Pathak
Refer the vendor website. It should have toolchain or BSP download link. Can you tell me, where have you got the BSP for this board or how have you compiled the filesystem for it?Gaurav Pathak

1 Answers

3
votes

This peculiar error message happens when the dynamic loader required by a particular executable is missing.

You can find out the name of the dynamic loader that you need by applying readelf to the problem executable. On my x86-64 Linux box, for example

$ readelf -l /bin/ls | grep 'program interpreter'
  [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]

("program interpreter" is another name for "dynamic loader".)

So, run the above command on your crosscomp binary on your development box. (If you don't have readelf or you get error messages, try arm-linux-gnueabi-readelf.) The file named after "program interpreter:" needs to exist on your target ARM machine. If you don't know where to get it, please post the output of the above command + ls -l of the directory that should have the missing file in it.