2009-09-10 5 views
0

J'ai un problème avec mon port mips .... Chaque fois que j'essaie de compiler un programme C avec une instruction printf, il donne un avertissement disant qu'il n'est pas reconnu et dans le fichier assemblé généré il n'y a pas de .asciiz directive ... La chaîne n'est pas là .... quelqu'un peut-il me dire pourquoi?Problème avec l'assemblage mips

Et quelle est la différence entre la construction d'un compilateur croisé métal nu et une croix-toolchain

Je suis nouveau dans le monde des compilateurs croisés .... :-)

+0

Il serait utile si vous pouviez poster un exemple de code minimum qui reproduit le problème. Ma conjecture est que vous n'avez pas inclus un fichier d'en-tête qui définit printf. (De plus, en fonction de votre cible, printf est une routine assez coûteuse à utiliser dans un environnement intégré.) Vous pourriez vouloir coller à puts()) –

Répondre

1

Assurez-vous ont

#include <stdio.h> 

en haut de vos fichiers source C qui utilisent printf.

0

Et quelle est la différence entre la construction d'un compilateur croisé métal nu et une croix-toolchain

compilateur croix (qui est gcc) fait partie de la section toolchain.

A côté gcc, nous avons encore besoin

  • binutils (pour platfrom cible)
  • noyau (de platfrom cible)
  • glibc (pour platfrom cible)

check out this book pour détail.

+0

donc ce que vous dites est qu'un toolchain cross compiler nécessiterait tous ces paquets mais un compilateur croisé de métal nu ne serait pas? Également certains où sur les discussions gcc j'ai lu qu'au lieu de glibc certaines personnes suggèrent que nous utilisons uclibc ou newlib ... Cela fera-t-il réellement une différence? –

0

Comment compilez-vous? Eclipse ou ligne de commande? J'ai eu un problème similaire en utilisant Eclipse et j'ai découvert que la famille de processeurs était "vide" dans Eclipse. Cela a entraîné l'assembleur ne pas comprendre la sortie du compilateur, semblable aux symptômes que vous avez décrits.

compilateurs Cross ne sont pas si différents des compilateurs normaux:

  • binaire en sortie peut être incompatible avec l'ordinateur de construction (peut être pour plusieurs plates-formes)
  • compilateur
  • peut être en mesure de sortie beaucoup de différents code de plate-forme

Dans le cas de GCC, il peut être chargé avec une ou plusieurs familles de processeurs. Le GCC qui vient avec Cygwin est assez limité (i686); Sous Linux, vous aurez plus de choix. Je vous suggère de soulever une question différente sur la façon de configurer la compilation croisée de vous avez besoin d'aide.

+0

je pense que j'ai construit un compilateur croisé mais je ne suis pas sûr .... J'ai installé binutils 2.19, puis configuré gcc 4.3.1 pour mips-linux-gnu comme cible ... puis utilisé la commande pour assembler le fichier c et créer un fichier exécutable .. mais je ne suis pas sûr que si ce que je faisais était pour un compilateur croisé de métal nu ... comment devrais-je trouver en dehors? –

+0

aussi j'ai oublié d'ajouter malgré l'utilisation de l'option -o je n'ai toujours pas généré de fichier? Je ne suis pas capable de comprendre pourquoi .. –

+0

J'ai relu votre problème et si c'est seulement lié à printf je doute que ce soit vraiment un problème de (compilateur croisé). Pouvez-vous inclure l'avertissement? Avez-vous inclus le bon fichier? Aucun #defines actif sur printf? – Adriaan