2013-06-05 6 views
12

Ich bin ein einfachen Cross-Compiler (cc) für einen ARM-Cortex-A9 versuchen: Um die Dinge einfach, das ist der c-Code zu halten:Cross-Compiler für ARM Hello World

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

Die native Kompilierung auf dem Arm funktioniert gut und wird gestartet mit gcc helloworld.c -o helloworld während der Cross-Compiler mit arm-xilinx-linux-gnueabi-gcc helloworld.c -o helloworld_cc

GCC Version gestartet wird:

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 von readelf:

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

verlinkte Libs - die Kreuz kompiliert ist statisch verknüpft, so sollte es nicht verpassen keine 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 

Das Problem: das native Programm fein läuft, immer die cc endet mit:

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

Irgendwelche Hinweise, hoffentlich, ich habe genug Informationen enthalten.

bearbeiten

es statische Verknüpfung funktioniert der Trick, aber jetzt ist die Größe der Datei ist riesig (678KB (CC-statisch) vs. 4 kB (nativ)? Warum ist Libs fehlt, auch wenn er sagt, es ist nicht dynamisch gelinkt ähnliche Frage:. Cross compiling static C hello world for Android using arm-linux-gnueabi-gcc

arm-xilinx-linux-gnueabi-gcc helloworld.c -o helloworld_cc -static 
+0

Versuchen Sie ARM-CORTEX-A9-Binärdatei auf x86 Linux ausführen? –

+0

nein es ist ein Linaro/Ununtu auf dem Arm Cortex a9 (Xillinux auf Zedboard) http://xillybus.com/xillinux – eactor

+0

ok. Überprüfen Sie dann das ausführbare Attribut Ihrer Binärdatei. –

Antwort

8

Ther ein fehlendes Glied in den lib Ordnern Linaro Ubuntu wurde es zeigte dich mit readelf -a

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

Setzen Sie den Link lib/ld-linux.so.3 zu lib/arm-linux-gnueabihf/ld-2.15.so

und es funktioniert.

Danke für die Hilfe Sergey

+1

Dieser Beitrag ist alt, aber ich habe ein ähnliches Problem mit Ihrem, aber kann es nicht lösen, also frage mich, ob du dir meine Frage ansehen könntest - http://stackoverflow.com/questions/39920945/cross-compile-qt-5-helloworld-app-for-armv7l – kaushal