2010-12-01 5 views
2

Je comprends ce que sont les compilateurs croisés et pourquoi sont-ils utilisés. Mais dans une interview, on m'a demandé de quelle manière les compilateurs croisés sont différents des compilateurs normaux. Je leur ai dit le but des compilateurs croisés. En outre, la carte mémoire sera différente pour eux. Mais le gars ne semble pas être convaincu. Quelqu'un peut-il me dire les différences de base par rapport aux compilateurs normaux?cross compilers

+0

Que croyez-vous que le but soit? – mkb

+1

Certains intervieweurs sont bons pour rester impassible, peu importe votre réponse. Peut-être l'avez-vous convaincu, mais il ne voulait pas réagir fortement à votre réponse. –

+0

Un bon conseil pour ce genre de situation est de demander ce qu'ils croient que la réponse soit. Même si vous n'obtenez pas le travail, vous apprenez quelque chose de nouveau. J'ai eu une situation similaire lorsqu'on m'a interrogé sur le multi-threading dans une interview. Le multi-threading est très très surutilisé, généralement inutilement. L'intervieweur a demandé quand cela serait utile et je n'ai pas pu trouver un très bon exemple et lui ai posé la même question. Je n'ai pas obtenu le poste mais j'ai amélioré mes connaissances en programmation avec une très bonne réponse. – AlastairG

Répondre

0

Un compilateur normal peut être un compilateur croisé. Prenez GCC par exemple.

Je cite Wikipedia:

GCC, une collection de logiciels libres de compilateurs, peut être mis en place pour traverser compilation. Il prend en charge de nombreuses plates-formes et les langues. Cependant, en raison du temps bénévole limité et l'énorme quantité de travail qu'il faut pour maintenir travailler compilateurs croisés, dans de nombreux communiqués certains des compilateurs croisés sont cassés. [Citation nécessaire]

GCC exige qu'un compilé copie de binutils être disponible pour chaque plate-forme ciblée . Surtout important est l'assembleur GNU. Par conséquent, binutils doit d'abord être compilé correctement avec le commutateur - target = some-target envoyé au script de configuration. GCC doit également être configuré avec la même option - target . GCC peut ensuite être exécuté normalement à condition que les outils, créés par binutils , soient disponibles dans le chemin .

+0

Mais cela ne répond pas à la différence entre les compilateurs croisés et les compilateurs – iSegFault

+0

@ravspratapsingh: quelqu'un me corrige si je me trompe, mais je ne pense pas que vous puissiez avoir un compilateur croisé qui n'est PAS non plus un compilateur. Un compilateur croisé est un compilateur avec une capacité supplémentaire de générer du code pour une plate-forme cible différente de la plate-forme hôte où la compilation est appelée. Si ce genre de réponse ne satisfaisait pas l'interviewer, alors je me demande quelle aurait été sa réponse. – darioo

+0

Je pense qu'il voulait savoir comment exactement les codes du compilateur sont différents. – iSegFault

1
+0

c'est ce que fait le compilateur croisé. En quoi sont-ils différents des compilateurs normaux? – iSegFault

+0

remplacez «cross» par «normal» et plus tard, remplacez par «.... pour une plate-forme sur laquelle le compilateur est exécuté». Ensuite, créez une phrase qui décrit cette différence. – KevinDTimm

+0

Eh bien, de nombreux compilateurs qui ne sont pas techniquement des compilateurs croisés peuvent le faire aussi, selon la façon dont votre auditeur interprète le mot «plateforme». Je serais plus enclin à le définir négativement: Un exécutable construit avec un compilateur croisé ne peut pas être exécuté nativement sur la plate-forme sur laquelle il est compilé. –

3

Un compilateur croisé est un compilateur capable de créer un code exécutable pour une plate-forme autre que celui sur lequel le compilateur est exécuté. Cross Les outils de compilation sont utilisés pour générer des exécutables pour un système intégré ou des plates-formes multiples . Il est utilisé pour compiler pour une plate-forme sur laquelle il n'est pas possible de faire la compilation, comme les microcontrôleurs qui ne supportent pas un système d'exploitation . Il est devenu plus courant d'utiliser cet outil pour la paravirtualisation lorsqu'un système peut avoir une ou plusieurs plates-formes en cours d'utilisation. - WIKI

selon certaines sources, vous ne peux pas dire simplement java (ou tout autre environnement d'exécution utilise ou machines virtuelles) en tant que compilateurs croisés.

Les compilateurs réellement croisés peuvent cibler de nombreuses plates-formes à partir d'un code source. mais vous devrez peut-être construire chacun d'eux séparément

0

La différence principale est qu'avec un "compilateur normal" vous pouvez exécuter l'exécutable compilé directement sur la machine sur laquelle vous l'avez compilé. Avec un compilateur croisé, vous devrez le télécharger sur un système en utilisant sa plate-forme ciblée en quelque sorte pour l'exécuter et voir si cela fonctionne. (Ou utilisez une sorte d'émulateur ou de VM).

C'est la seule grande différence, vraiment. Il ajoute une ou deux étapes supplémentaires dans votre cycle edit-compile-debug. Cela peut être un peu douloureux.Là encore, typiquement, les compilateurs croisés sont utilisés pour les systèmes en temps réel ou embarqués où le résultat probable d'un bug est un plantage total du système. Si cela peut arriver, vous aurez plus de mal à fonctionner sur votre système de développement, car vous devrez constamment attendre les redémarrages et redémarrer votre éditeur, recharger les fichiers de travail dans votre éditeur, etc.

0

Certains cross-compilateurs ont des générateurs de code enfichables, donc vous indiquez simplement le type de code que vous voulez générer et ils recherchent le générateur approprié et invoquent l'assembleur approprié pour la cible que vous spécifiez. Pour la plupart, cependant, un compilateur est un compilateur; ils font tous la même chose.

0

Je pense que le compilateur croisé utilise un code de langage d'assemblage différent. par exemple, le i386 et le bras utilisent un code de langage d'assemblage différent.