2017-10-30 6 views
-1

Ich sehe eine Menge von Konfliktinformationen und möchte etwas Klärung. build, Host und ZielCross-Compilation-Terminologien --- Build, Host und Ziel

Es gibt drei Systemnamen, die die Build kennt: die Maschine, die Sie bauen auf (Build), die Maschine, die Sie für (Host) bauen, und die Maschine, für die GCC Code für (Ziel) erzeugt. Wenn Sie GCC konfigurieren, geben Sie diese mit --build =, --host = und --target = an.

Eigentlich verstehe ich nicht, was der Unterschied zwischen Host und Ziel in der obigen Definition.

Einige andere Seite sagt

‚host‘ ist die Maschine (oder Architektur oder Plattform), die Sie den Code zu kompilieren verwenden; "Ziel" ist die Maschine (oder Architektur oder Plattform), die den Code ausführen soll.

Das macht Sinn für mich, aber in dieser Erklärung ist die Host immer das gleiche wie der Build ?? Ich bin ziemlich verwirrt.

In meinem Fall konfiguriere ich so, dass der Compiler (GCC) auf x86_64 Maschine läuft und die ausführbare Binärdatei auf ARM läuft. Das Programm ist in C geschrieben, daher ist der Compiler GCC.

./configure --build=x86_64 --host=x86_64 --target=arm-linux-gnueabihf 
    make 
    make install 

Es klingt wie bauen, Host beide x86_64 und Ziel ist am Arm. Ist das korrekt?

Ich kompiliere mein eigenes eingebettetes Programm, das auf Jenkins Maschine (x86_64) läuft. Und das eingebettete Programm läuft auf ARM-basierter Maschine.

+0

Welches genaue Programm kompilieren Sie? Irgendeine Cross-Compiler-Version von [GCC] (http://gcc.gnu.org/) oder einfach dein eigenes Programm mit einer bereits verfügbaren 'gcc'-Binärdatei? Zeigen Sie einige [MCVE] (zeigen Sie also eine Quelle in Ihrer Frage an) und zeigen Sie die exakten * Kompilierungsbefehle an, die Sie verwenden (und erklären Sie, auf welchen Computern sie laufen). Erzählen Sie von Ihren Systemen (was ist der Host, der Build-Rechner, der Zielrechner). Bitte ** bearbeiten Sie Ihre Frage **, um sie zu verbessern. Es ist derzeit verwirrend. –

+0

Auch bei der Bearbeitung ist deine Frage unklar: Was bedeutet "Ich konfiguriere so, dass der Compiler" bedeutet?* Was ist konfiguriert und wie ?? * Bitte ** verbessern Sie Ihre Frage ** noch mehr. * Geben Sie die genauen Befehle * beteiligt. Erklären Sie, auf welchen Computern sie ausgeführt werden. ** Was für einen Compiler verwendest du? ** * und * ** Wie benutzt du es? ** –

+0

Natürlich ist Englisch nicht deine Muttersprache (und auch nicht für mich; ich bin Franzose). Also verbessern Sie Ihre Formulierung (vielleicht mit Hilfe eines Wörterbuchs) und geben Sie die * genauen Befehle *, die Sie verwenden. IMHO der Satz "Ich konfiguriere so, dass der Compiler auf x86_64 Maschine läuft und die binäre ausführbare Datei läuft auf ARM" macht keinen Sinn (Sie sagen nicht, was und wie Sie konfigurieren). Da Englisch für Sie nicht einfach ist, müssen Sie in Ihrer Frage mehr Informationen und Redundanz hinzufügen. –

Antwort

1

Angenommen, ich habe einen PowerPC-Computer, der einen Compiler erstellt, den Sie auf einem x86-Computer verwenden (ausführen), der Binärdateien erstellt, die auf einem ARM ausgeführt werden.

Das macht den PPC zum Build, der x86 zum Host, und das Ziel ist der ARM. Wie Basile bemerkte, ist dies ein kanadisches Kreuz.

Es ist weniger üblich, einen Build und einen Host zu verwenden, die unterschiedlich sind, aber es passiert sicherlich. Manchmal sind der Build und der Host sogar die gleiche Architektur, aber die Umgebungen, die dies verursachen, unterscheiden sich. Das Erstellen einer benutzerdefinierten Toolchain auf meinem x86 bedeutet, dass Build und Host x86 sind, aber der Host möglicherweise andere Bibliotheken oder Versionen von Abhängigkeiten als der Build hat. Dies ist der Fall, wenn Sie Sandbox-Toolchains für die Embedded-Entwicklung erstellen, die beispielsweise auf einem Build-Server ausgeführt werden.

+1

Und diese Situation wird als Canadian-Cross Compiler bezeichnet. Ich weiß nicht warum. –

+0

@BasileStarynkevitch Ich bin noch mehr verwirrt. Ich mache keinen Compiler. Ich verwende Makefile, um eine Binärdatei zu generieren, die auf ARM läuft. Das Makefile wird auf dem Computer x86_64 ausgeführt, das ausführbare Binärprogramm muss jedoch auf dem ARM-Computer ausgeführt werden. – sh0731

+0

@SteveHe: Sie konfigurieren GCC, also * bauen * Sie einen Compiler (einige Binärdateien von 'gcc'). Sonst macht deine Frage keinen Sinn. –