2010-09-15 26 views
2

J'ai créé une chaîne de compilation croisée pour arm-gcc, en configurant binutils, newlib, gcc et gdb pour la cible arm-elf. Le problème que j'ai est, quand je compile un programme avec arm-elf-gcc sur mon Mac, il génère un exécutable de 32 bits avec ne peut pas être exécuté dans l'environnement 64 bits.Exécution d'un fichier objet 32 ​​bits sur un environnement 64 bits

Quelle est la meilleure façon de contourner ce problème? Je pourrais placer les exécutables de 32 bits à un environnement de bras, mais je suis intéressé pour savoir si je pourrais exécuter le dossier dans mon Mac de quelque manière que ce soit?

--Added--

Je l'ai fait avant, mais permettez-moi de faire savoir que l'objectif de mon programme est un Beagleboard, et je me attendais que je compiler et générer les objets à l'aide du bras-gcc sur mon Mac OS X et transférez le * .o sur le Beagleboard pour voir la sortie. Hélas, il donne aussi la même erreur sur le Beagleboard quand je fais un ./hello.o.

Merci,
Sayan

Répondre

4

Plusieurs problèmes vous empêchent d'exécuter votre exécutable sur un Mac.

1) Architecture. Votre Mac est probablement une machine x86/x86_64 (ou PowerPC) mais votre binaire est compilé pour l'architecture ARM (ce qui est l'avantage d'utiliser un compilateur croisé). Ces jeux d'instructions ne sont pas compatibles.

2) Votre fichier binaire est lié en tant que fichier objet ELF, tandis que les fichiers Mac utilisent le format de fichier objet Mach-O. Votre système d'exploitation ne peut pas charger ce format exécutable.

3) Votre exécutable est lié à newlib (pour une cible qui n'est probablement pas Mac OS) au lieu de Mac OS libc. Vos appels système ne sont pas corrects pour cette plate-forme.

Si votre programme est un exécutable unix standard, vous pouvez le compiler simplement avec le système standard gcc et il fonctionnera. Sinon, vous pouvez l'exécuter dans un émulateur ARM, même si cela peut être assez compliqué à mettre en place.

+0

Merci de m'avoir fait comprendre. Probablement chercher un émulateur ARM. – Sayan

1

Le fait que ce soit 32 bits est hors de propos - vous ne pouvez pas exécuter du code ARM sur un Mac (sauf si vous pouvez trouver une sorte d'émulateur ARM).

+0

Bon, je voulais juste le savoir. Probablement chercher un émulateur ARM. Merci! – Sayan

+0

Emulation de bras dur Qemu intégrée. – doron