2013-06-05 14 views
12

Sto cercando un semplice cross-compilazione (cc) per un ARM-Cortex-A9: Per semplificare le cose questo è il codice C:Croce Compile helloworld per ARM

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

La compilazione nativa sul braccio funziona bene ed è iniziato con gcc helloworld.c -o helloworld mentre la cross-compilazione viene avviato con arm-xilinx-linux-gnueabi-gcc helloworld.c -o helloworld_cc

GCC versione:

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

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

librerie collegate - la la croce compilata è collegata staticamente, quindi non dovrebbe perdere nessun librerie:

[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 

Il problema: il programma nativo funziona bene, il cc finisce sempre con:

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

Eventuali suggerimenti, si spera, ho incluso abbastanza informazioni.

modificare

Linking è statica fa il trucco, ma ora la dimensione del file è enorme (678kB (CC-statico) vs. 4kB (nativo)? Perché è manca librerie, anche se si dice essa non è legata in modo dinamico domanda simile:?. 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

stai cercando corrono ARM-Cortex-A9 binario su Linux x86? –

+0

no un Linaro/Ununtu in esecuzione sul braccio cortex a9 (xillinux su zedboard) http://xillybus.com/xillinux – eactor

+0

ok. quindi controlla l'attributo eseguibile sul tuo binario. –

risposta

8

Ther è stato un anello mancante nella cartella lib Linaro Ubuntu si presentò con readelf -a

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

Mettere il link lib/ld-linux.so.3 a lib/arm-linux-gnueabihf/ld-2.15.so

e funziona.

Grazie per l'aiuto Sergey

+1

Questo post è vecchio ma ho un problema simile al tuo, ma non posso risolverlo, quindi chiedendoti se puoi dare un'occhiata alla mia domanda - http://stackoverflow.com/questions/39920945/cross-compile-qt-5-helloworld-app-for-armv7l – kaushal