2010-07-15 7 views
1

Je viens de compiler un compilateur croisé en utilisant des tables croisées "mips-unknown-linux-gnu-gcc" et j'ai compilé un programme Hello World. La compilation est bien passé en utilisant la commande suivante: "mips-unknown-linux-gnu-g ++ hello.cpp -o bonjour" mais quand je lance la commande "./hello" Je reçois l'erreur suivante:Erreur d'exécution binaire du compilateur croisé

babbage-dasnyder 50% mips-unknown-linux-gnu-g++ hello.cpp -o hello 
babbage-dasnyder 51% ./hello 
./hello: Exec format error. Wrong Architecture. 

Pourquoi est-ce? Ai-je fait le mauvais compilateur croisé? Je cours ceci sur une machine de Linux.

Tout comme une note, crosstools l'avez dit pourrait exécuter un programme trivial:

+ /home/seas/grad/dasnyder/opt/crosstool/gcc-3.4.5-glibc-2.3.6/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-gcc -static hello.c -o mips-unknown-linux-gnu-hello-static 
+ /home/seas/grad/dasnyder/opt/crosstool/gcc-3.4.5-glibc-2.3.6/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-gcc hello.c -o mips-unknown-linux-gnu-hello 
+ test -x /home/seas/grad/dasnyder/opt/crosstool/gcc-3.4.5-glibc-2.3.6/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-g++ 
+ cat 
+ /home/seas/grad/dasnyder/opt/crosstool/gcc-3.4.5-glibc-2.3.6/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-g++ -static hello2.cc -o mips-unknown-linux-gnu-hello2-static 
+ /home/seas/grad/dasnyder/opt/crosstool/gcc-3.4.5-glibc-2.3.6/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-g++ hello2.cc -o mips-unknown-linux-gnu-hello2 
+ echo testhello: C compiler can in fact build a trivial program. 
testhello: C compiler can in fact build a trivial program. 
+ test '' = 1 
+ test '' = 1 
+ test '' = 1 
+ test 1 = '' 
+ echo Done. 
Done. 
+2

Exécutez-vous "./hello" sur le même ordinateur que vous l'avez compilé? –

+0

Si vous êtes sur Windows et que vous compilez un programme pour Linux, pensez-vous que votre nouveau programme Linux fonctionnera sous Windows? Cette situation n'est pas vraiment différente ... (Si vous le faites, alors il y a une question beaucoup plus abstraite que vous devez demander) – Cogwheel

+0

Oui, je l'exécute sur la même machine, peut-être que je suis un peu confus, mon but est de compiler un programme sur ma machine linux afin que je puisse ensuite démonter le fichier elf et le charger dans un simulateur de mips que j'ai construit. Donc le fichier elf devrait être un fichier elf MIPS. Je peux voir où cela ne peut pas s'exécuter sur la machine linux, mais alors comment puis-je tester que le compilateur a fonctionné correctement et que le binaire compilé fonctionne correctement? Gardez à l'esprit que mon simulateur de Mips est en cours de test et ne peut pas encore être utilisé pour une telle vérification. –

Répondre

3

Just as a note, crosstools did say it could run a trivial program:

testhello: C compiler can in fact build a trivial program.

Lorsque vous traversez décompiler à une architecture différente, vous générez des instructions pour la nouvelle architecture et donc vous peut ne pas être en mesure d'exécuter ces instructions sur votre architecture actuelle. Vous effectuez une compilation croisée pour pouvoir compiler le code sur une machine plus puissante et ensuite le transférer sur l'appareil pour le tester. Si vous souhaitez tester le code directement sur votre machine, vous devez compiler avec le compilateur de votre architecture native.

+0

Oui, j'ai le sens réalisé cela. Fortunatly j'ai SESC pour exécuter le code MIPS. –