Подтвердить что ты не робот

Кросс-компиляция helloworld для ARM

Я пытаюсь создать простой кросс-компилятор (cc) для ARM-CORTEX-A9: Чтобы все было просто, c-code:

#include <stdio.h>
int main()
{
   printf("Hello World!\n");
   return 0;
}

Нативная компиляция на руке отлично работает и запускается с gcc helloworld.c -o helloworld, тогда как кросс-компиляция начинается с arm-xilinx-linux-gnueabi-gcc helloworld.c -o helloworld_cc

Версия GCC:

nativ: gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) Target: arm-linux-gnueabihf

CC: gcc version 4.6.3 (Sourcery CodeBench Lite 2012.03-79) Target: arm-xilinx-linux-gnueabi

ABI от readelf:

readelf-nativ: OS: Linux, ABI: 2.6.31 readelf-cc: OS: Linux, ABI: 2.6.16

Связанные libs - скомпилированный перекрестно статически связан, поэтому он не должен пропустить любые libs:

[email protected]:/temp# ldd helloworld
        libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xb6ed8000)
        /lib/ld-linux-armhf.so.3 (0xb6fce000)
[email protected]:/temp# ldd helloworld_cc
        not a dynamic executable

Проблема: встроенная программа работает нормально, cc всегда заканчивается:

[email protected]:/tmp# ./helloworld_cc
-bash: ./helloworld_cc: No such file or directory

Любые подсказки, надеюсь, я включил достаточно информации.

изменить

Связывание статики делает трюк, но теперь размер файла огромен (678kB (CC-static) против 4kB (родной)? Почему он отсутствует в libs, даже если он говорит, что он не динамически связан?: Кросс-компиляция статического C-hello world для Android с использованием arm-linux-gnueabi-gcc

arm-xilinx-linux-gnueabi-gcc helloworld.c -o helloworld_cc -static
4b9b3361

Ответ 1

Ther был недостающим звеном в папке lib Linaro Ubuntu. Он появился с помощью readelf -a

[Requesting program interpreter: /lib/ld-linux.so.3]

Поместите ссылку lib/ld-linux.so.3 в lib/arm-linux-gnueabihf/ld-2.15.so

и он работает.

Спасибо за помощь Сергея