Cross-Compiler

Ein Cross-Compiler ist ein Compiler Lage zu schaffen, ausführbaren Code zu einem anderen als dem, auf dem der Compiler läuft Plattform. Zum Beispiel kann ein Compiler, der auf einem Windows 7-PC läuft, sondern generiert Code, der auf Android-Smartphone läuft ist ein Cross-Compiler.

Ein Cross-Compiler ist notwendig, um für mehrere Plattformen von einer Maschine zu kompilieren. Eine Plattform könnte unmöglich sein, ein Compiler auf denen sie laufen, wie zum Beispiel für den Mikrokontroller eines eingebetteten Systems, da diese Systeme enthalten kein Betriebssystem. In Paravirtualisierung einer Maschine läuft vielen Betriebssystemen und ein Cross-Compiler könnte von einer Hauptquelle eine ausführbare Datei für jeden von ihnen zu erzeugen.

Cross-Compiler nicht mit Source-zu-Source-Compiler zu verwechseln. Ein Cross-Compiler ist für die plattformübergreifende Software-Entwicklung von Binär-Code, während eine Source-to-Source "Compiler" einfach übersetzt aus einer Programmiersprache zur anderen in Textcode. Beide sind Programmierwerkzeuge.

Verwendet der Cross-Compiler

Die grundsätzliche Verwendung eines Cross-Compiler ist es, die Build-Umgebung von Zielumgebung zu trennen. Dies ist nützlich in einer Reihe von Situationen:

  • Embedded Computern, auf denen ein Gerät äußerst begrenzten Ressourcen. Zum Beispiel wird ein Mikrowellenofen einen extrem kleinen Computer verfügen, um ihre Berührungsfläche und Türsensor zu lesen, bereitzustellen Ausgabe an eine digitale Anzeige und Lautsprecher, und die Maschinen zum Garen von Lebensmitteln zu steuern. Dieser Computer wird nicht stark genug, um einen Compiler, ein Dateisystem oder eine Entwicklungsumgebung laufen. Seit Debuggen und Testen kann auch verlangen, mehr Ressourcen, als es auf einem embedded System verfügbar sind, können Cross-Kompilierung weniger aufwendig und weniger fehleranfällig als die natürliche Zusammenstellung sein.
  • Kompilieren für mehrere Maschinen. Zum Beispiel kann ein Unternehmen wünschen, mehrere verschiedene Versionen eines Betriebssystems zu unterstützen oder um mehrere verschiedene Betriebssysteme unterstützen. Durch die Verwendung eines Cross-Compiler kann eine einzelne Build-Umgebung bis zu für jedes dieser Ziele zu kompilieren gesetzt werden.
  • Kompilieren in einer Serverfarm. Ähnlich wie bei der Zusammenstellung für mehrere Maschinen, eine kompliziert zu bauen, dass viele beinhaltet kompilieren Operationen können über jede Maschine, die kostenlos ist, unabhängig von der zugrunde liegenden Hardware oder dem Betriebssystem-Version, die es ausgeführt wird ausgeführt.
  • Bootstrapping auf eine neue Plattform. Bei der Entwicklung von Software für eine neue Plattform oder dem Emulator eines zukünftigen Plattform verwendet man einen Kreuzcompiler wie dem Betriebssystem und einem nativen Compiler erforderlichen Werkzeuge zu kompilieren.
  • Kompilieren nativen Code für Emulatoren für ältere inzwischen veraltete Plattformen wie den Commodore 64 oder Apple II von Enthusiasten, die Cross-Compiler, der auf einem aktuellen Plattform laufen zu verwenden.

Einsatz von virtuellen Maschinen behebt einige der Gründe für die Cross-Compiler entwickelt. Die virtuelle Maschine-Paradigma ermöglicht die gleiche Ausgabe des Compilers auf mehrere Zielsysteme verwendet werden, obwohl dies nicht immer optimal, da virtuelle Maschinen sind oft langsamer und das kompilierte Programm kann nur auf Computern mit dieser virtuellen Maschine ausgeführt werden.

Typischerweise wird die Hardware-Architektur unterscheidet sich aber Cross-Kompilierung ist auch anwendbar, wenn nur die Betriebssystemumgebung unterscheidet, wie bei der Erstellung eines FreeBSD-Programm unter Linux, oder auch nur die Systembibliothek, wie beim Kompilieren von Programmen mit uClibc auf glibc-Host.

Canadian Kreuz

Die kanadische Kreuz ist eine Technik für den Aufbau von Cross-Compiler für andere Maschinen. Angesichts drei Maschinen A, B, und C, verwendet eine Maschine A, um einen Cross-Compiler, der auf Maschine B läuft bei Verwendung des kanadischen Kreuz mit GCC, um ausführbare Dateien für Maschinen C. erstellen zu bauen, kann es vier beteiligten Compiler sein:

  • Die proprietäre nativen Compiler für Maschine A wird der gcc-Compiler für nativen Maschinen A. bauen
  • Der gcc-Compiler für nativen Maschinen A verwendet, um den gcc Cross-Compiler von Maschine A zu Maschine B zu bauen
  • Der gcc Cross-Compiler von Maschine A zu Maschine B wird verwendet, um die gcc Cross-Compiler von Maschine zu Maschine B C bauen

Das Endergebnis Cross-Compiler wird nicht in der Lage, auf Ihrem Build-Rechner A zu laufen; anstatt Sie es auf Maschine B zu verwenden, um eine Anwendung in ausführbaren Code, die dann auf Maschine C kopiert und auf dem Rechner C ausgeführt werden würde kompilieren würde

Zum Beispiel bietet eine NetBSD POSIX Unix-Shell-Skript mit dem Namen, der seine eigene Toolchain mit der Host-Compiler ersten aufbauen wird; Dies wiederum wird verwendet, um die Quer Compiler, um das ganze System zu bauen wird aufzubauen.

Der Begriff Canadian Kreuz kam zustande, weil zu der Zeit, dass diese Themen zur Diskussion standen, Kanada hatte drei nationalen Parteien.

Timeline der frühen Cross-Compiler

  • 1979 - ALGOL 68C erzeugt ZCode; Dies half dem Compiler und andere ALGOL 68 Anwendungen auf alternativen Plattformen zu portieren. Um die ALGOL 68C-Compiler zu 120kB Speicherbedarf zu kompilieren. Mit Z80 seinen 64kB-Speicher ist zu klein, um den Compiler tatsächlich zu kompilieren. Also für die Z80 der Compiler selbst hatte zu überqueren von der größeren CAP Fähigkeit Computer oder einem IBM System / 370 Mainframe-kompiliert werden.

GCC und Cross Compilation

GCC, ein freies Software-Sammlung von Compilern, kann bis zu Quer Kompilierung festgelegt werden. Es unterstützt viele Plattformen und Sprachen.

GCC setzt voraus, dass eine kompilierte Kopie binutils verfügbar sein für jede Zielplattform. Besonders wichtig ist die GNU Assembler. Daher binutils ersten hat richtig mit dem Schalter auf der configure-Skript geschickt kompiliert werden. GCC hat auch mit der gleichen Option konfiguriert werden. GCC kann dann normal ausgeführt werden, vorausgesetzt, dass die Werkzeuge, die binutils schafft, sind auf dem Weg, die Verwendung der folgenden getan werden kann, zur Verfügung:

Kreuz kompilieren GCC setzt voraus, dass ein Teil der C-Standardbibliothek der Zielplattform verfügbar sein auf der Host-Plattform. Der Programmierer kann wählen, um die volle C-Bibliothek zu kompilieren, aber diese Wahl könnte unzuverlässig sein. Die Alternative ist, newlib, die ein kleines C-Bibliothek enthält nur die wichtigsten Komponenten, die zum C-Quellcode zu kompilieren ist zu verwenden.

Die GNU Autotools-Pakete verwenden den Begriff einer Bauplattform, eine Host-Plattform, und eine Zielplattform. Die Build-Plattform ist, wo der Compiler tatsächlich zusammengestellt. In den meisten Fällen sollte build undefiniert bleiben. Die Hostrechner-Plattform ist, wo die Ausgabe-Artefakte vom Compiler ausgeführt wird. Die Zielplattform wird eingesetzt, wenn Quer Kompilieren Cross-Compiler, stellt sie, welche Art von Objekt-Code das Paket selbst zu erzeugen; sonst wird die Zielplattform Einstellung ist irrelevant. Betrachten Sie beispielsweise Cross-Kompilierung ein Videospiel, das auf einer Dreamcast laufen wird. Der Rechner, auf dem das Spiel kompiliert ist der Host-Plattform, während der Dreamcast ist die Zielplattform.

Eine andere Methode, im Volksmund von Embedded-Linux-Entwickler verwendet, beinhaltet die Kombination von GCC Compiler mit speziellen Sandkästen wie Scratchbox, scratchbox2 oder Proot. Diese Tools erstellen Sie eine "chroot" Sandkasten, wo der Programmierer notwendigen Werkzeuge, libc, und Bibliotheken, ohne dass zusätzliche Wege gesetzt aufzubauen. -brett Sind ebenfalls vorhanden, um "zu täuschen", die Laufzeit, so dass sie "glaubt" es tatsächlich von der beabsichtigten Ziel-CPU läuft; dies ermöglicht Konfigurationsskripte und dergleichen, ohne Fehler ausgeführt. Scratchbox läuft langsamer im Vergleich zu "nicht-chroot" Methoden und Werkzeuge, die die meisten auf dem Host befinden muss in Scratchbox bewegt, um zu funktionieren.

Manx Aztec C Cross-Compiler

Manx Software Systems, von Shrewsbury, New Jersey, hergestellt C-Compiler beginnend in den 1980er Jahren an professionelle Entwickler für eine Vielzahl von Plattformen bis einschließlich PCs und Macs richtet.

Manx Aztec Programmiersprache C war für eine Vielzahl von Plattformen, einschließlich MS-DOS, Apple II, DOS 3.3 und ProDOS, Commodore 64, Macintosh 68XXX und Amiga erhältlich.

Aus den 1980er Jahren und Weiterbildung in den 1990er Jahren bis zum Manx Software Systems verschwanden, wurde die MS-DOS-Version von Aztec C sowohl als einheitlichen Modus Compiler oder als Cross-Compiler für andere Plattformen mit unterschiedlichen Prozessoren einschließlich des Commodore 64 und Apple II angeboten. Internet-Distributionen noch für Aztec C einschließlich der MS-DOS-basierten Cross-Compiler vorhanden. Sie sind immer noch in Gebrauch.

Manx Aztec C86, ihre nativen Modus 8086 MS-DOS-Compiler, war auch ein Cross-Compiler. Obwohl es nicht Code für einen anderen Prozessor wie ihre Aztec C65 6502 Cross-Compiler für den Commodore 64 und Apple II zu kompilieren, erstellt es binäre ausführbare Dateien für die dann-Legacy-Betriebssysteme für die 16-Bit-8086-Prozessoren.

Wenn der IBM PC zuerst eingeführt wurde es verfügbar war mit einer Auswahl von Betriebssystemen, CP / M-86 und PC DOS wobei zwei von ihnen. Aztec C86 wurde mit Link Libraries zur Erzeugung von Code für beide IBM-PC-Betriebssysteme zur Verfügung gestellt. Im Laufe der 1980er Jahre späteren Versionen von Aztec C86 Unterstützung für MS-DOS "transitorische" Versionen 1 und 2 und die weniger robust als die "Baseline" MS-DOS-Version 3 und später waren die Azteken C86 gezielt bis zu seinem Tod.

Schließlich Aztec C86 vorgesehen Sprache C-Entwickler mit der Fähigkeit, ROM-Lage "HEX" Code, der dann mit einem ROM-Brenner auf eine 8086-basierten Prozessor übertragen werden könnten direkt zu erzeugen. Paravirtualisierung kann mehr heute üblich, aber die Praxis der Erstellung von Low-Level-ROM-Code wurde häufiger pro Kopf in diesen Jahren, wenn Gerätetreiber Entwicklung wurde oft von Anwendungsprogrammierer für individuelle Anwendungen gemacht, und neue Geräte in Höhe von einer Heimindustrie. Es war nicht ungewöhnlich für Anwendungsprogrammierer, um direkt mit Hardware, ohne Unterstützung vom Hersteller anzuschließen. Diese Praxis war heute ähnlich wie Embedded Systems Development.

Thomas Fenwick und James Goodnow II waren die beiden Hauptentwickler von Aztec-C. Fenwick später bemerkenswerter, als der Autor des Microsoft Windows CE Kernel oder NK, wie es damals genannt wurde.

Microsoft C Cross-Compiler

Frühgeschichte - der 1980er Jahre

Microsoft C hat eine lange Geschichte stammt aus den 1980er Jahren. Die ersten Microsoft C Compiler wurden von der gleichen Firma, die Lattice C und wurden von Microsoft als ihr eigenes umbenannt hat, bis MSC 4 veröffentlicht wurde, die die erste Version, die Microsoft selbst hergestellt wurde.

Im Jahr 1987 begannen viele Entwickler die Umstellung auf Microsoft C, und viele mehr wäre in der gesamten Entwicklung von Microsoft Windows auf seinem gegenwärtigen Zustand zu folgen. Produkte wie Clipper, später Clarion sich heraus, dass einfach angebotenen Datenbankanwendungsentwicklung mithilfe von Quersprachtechniken, so dass ein Teil ihrer Programme mit Microsoft C kompiliert werden

1987

C-Programme schon lange mit Modulen in Assembler geschrieben Verbindung gebracht worden. Die meisten C-Compiler bieten eine Assemblersprache weiter.

Compiler wie Aztec-C umgewandelt alles Assemblersprache als eigenständige Pass und dann zusammengebaut den Code in einer deutlichen Pass und wurden für ihre sehr effizient und kleinen Code angegeben, aber bis 1987 der Optimierer in Microsoft C gebaut war sehr gut, und nur "mission critical" Teile eines Programms wurden in der Regel zum Umschreiben berücksichtigt. In der Tat hatte der Sprache C-Programmierung über die "untersten Ebene" Sprache aufgenommen, mit der Programmierung zu einem multidisziplinären Wachstumsbranche und Projekte immer größer, mit Programmierern schriftlich Benutzerschnittstellen und Datenbankschnittstellen in höheren Sprachen, und ein Bedürfnis hatten entstanden für grenzSprachEntwicklung, die bis heute andauert.

Bis 1987 mit der Veröffentlichung von MSC 5.1 bot Microsoft einen Quersprachentwicklungsumgebung für MS-DOS. 16-Bit-Binär-Objekt-Code in Assembler und Microsofts anderen Sprachen einschließlich Quick Basic, Pascal geschrieben und Fortran könnten zusammen in einem Programm verknüpft werden, in einem Prozess, den sie als "Mixed Language Programmierung" und jetzt "Interlanguage-Aufruf". Wenn BASIC wurde in dieser Mischung verwendet wird, um das Hauptprogramm benötigt in BASIC, um die interne Laufzeitsystem, die kompiliert BASIC für die Garbage Collection und seine anderen verwalteten Operationen, die einen BASIC-Interpreter wie QBasic in MS-DOS simuliert erforderlich zu unterstützen.

Die Aufrufkonvention für C-Code vor allem war es, Parameter in "umgekehrter Reihenfolge" auf dem Stack übergeben und Rückgabewerte auf den Stapel statt in einem Prozessorregister. Es gab noch andere Programmierregeln, um alle Sprachen zusammenarbeiten, aber diese spezielle Regel blieb durch das Kreuz die Sprachentwicklung, die im gesamten Windows-16 und 32 Bit-Versionen und bei der Entwicklung von Programmen für OS / 2 fort, und die bis heute anhält. Es wird als die Pascal Aufrufkonvention bekannt.

Eine andere Art von Querzusammenstellung, die Microsoft C wurde während dieser Zeit verwendet wurde, war der Einzelhandelsanwendungen, die Handheld-Geräten wie dem Symbol Technologies PDT3100, die eine Link-Bibliothek in einem 8088-basierten Barcode-Leser gezielt bereitgestellt erforderlich. Die Anwendung wurde auf dem Host-Computer dann auf das Handheld-Gerät, wo es ausgeführt wurde, ähnlich zu dem, was heute für den gleichen Markt mit Windows Mobile von Unternehmen wie Motorola, der Symbol gekauft getan übertragen gebaut.

Anfang der 1990er Jahre

In den 1990er Jahren, und beginnend mit MSC 6 Microsoft Wieder konzentrierten ihre C-Compiler auf dem aufstrebenden Windows-Markt, aber auch unter OS / 2 und bei der Entwicklung von GUI-Programme. Mixed Sprachkompatibilität blieb über MSC 6 auf der MS-DOS-Seite, aber die API für Microsoft Windows 3.0 und 3.1 wurde im 6. MSC MSC 6 geschrieben wurde ebenfalls erweitert, um die Unterstützung für 32-Bit-Baugruppen und Unterstützung für die Schwellen Windows for Workgroups bereitzustellen und Windows NT, das würde den Grundstein für Windows XP zu bilden. Ein Programmierpraxis genannt Thunk wurde eingeführt, um zu ermöglichen, die zwischen 16 und 32 Bit-Programme, die den Vorteil hat der Laufzeitbindung anstatt die statische Bindung, die in monolithischen 16-Bit-MS-DOS-Anwendungen begünstigt wurde. Statische Bindung wird noch von einigen nativen Code-Entwickler begünstigt, aber in der Regel nicht bieten den Grad der Wiederverwendung von Code durch neuere Best Practices wie das Capability Maturity Model erforderlich.

MS-DOS-Unterstützung war immer noch mit der Veröffentlichung von Microsofts erste C ++ Compiler, MSC 7, die abwärtskompatibel mit der Programmiersprache C und MS-DOS war und unterstützt sowohl 16-Bit und 32-Bit-Code-Generierung zur Verfügung gestellt.

MSC über denen Aztec C86 aufgehört hat. Der Marktanteil für die C-Compiler hatte wandte sich an Compilern, die die Vorteile der neuesten und besten Windows-Features nahm überqueren, bot C und C ++ in einem einzigen Paket und noch MS-DOS-Systeme, die bereits zehn Jahre alt waren, und die kleineren Unternehmen gestützt, dass produziert Compilern wie Aztec C nicht mehr konkurrieren und entweder wandte sich an Nischenmärkten wie eingebettete Systeme oder verschwunden.

MS-DOS und 16-Bit-Code-Generierung Unterstützung fortgesetzt, bis MSC 8.00c, die mit Microsoft C ++ und Microsoft Application Studio 1.5, dem Vorläufer von Microsoft Visual Studio, die das Kreuz-Entwicklungsumgebung, die Microsoft bieten heute gebündelt wurde.

Ende der 1990er Jahre

MSC 12 wurde mit Microsoft Visual Studio 6 freigegeben und nicht mehr unterstützte MS-DOS 16-Bit-Binärdateien, anstatt die Unterstützung für 32-Bit-Konsole-Anwendungen, aber zur Verfügung gestellt Unterstützung für Windows 95 und Windows 98 Code-Generierung als auch für Windows NT. Link Libraries waren für andere Prozessoren, die Microsoft Windows lief zur Verfügung; eine Praxis, dass Microsoft bis heute andauert.

MSC 13 wurde mit Visual Studio 2003 veröffentlicht, und MSC 14 wurde mit Visual Studio 2005 veröffentlicht, die beide weiterhin für ältere Systeme wie Windows 95 zu erzeugen, die aber für mehrere Zielplattformen einschließlich der Mobilfunkmarkt und die ARM-Architektur-Code erzeugt.

.NET Und darüber hinaus

Im Jahr 2001 entwickelte das Microsoft Common Language Runtime, die den Kern für their.NET Rahmen Compiler in der IDE von Visual Studio gebildet. Diese Schicht, die auf dem Betriebssystem, das in der API ermöglicht das Mischen von Entwicklungssprachen auf allen Plattformen, die das Windows-Betriebssystem kompiliert.

The.NET Framework-Laufzeit und CLR eine Abbildungsschicht auf die Kernroutinen für den Prozessor und den Vorrichtungen auf dem Zielcomputer. Die Kommandozeilen-C-Compiler in Visual Studio wird nativen Code für eine Vielzahl von Prozessoren kompiliert und können zum Aufbau der Kernroutinen selbst werden.

Microsoft.NET-Anwendungen für Zielplattformen wie Windows Mobile auf der ARM-Architektur Quer kompilieren auf Windows-Rechnern mit einer Vielzahl von Prozessoren und Microsoft bieten auch Emulatoren und Remote-Deployment-Umgebungen, die sehr wenig Konfiguration erforderlich, im Gegensatz zu den Cross-Compiler in Tagen durch oder verschwunden andere Plattformen.

Laufzeitbibliotheken, wie Mono, bieten Kompatibilität für cross-compiled.NET Programme auf andere Betriebssysteme, wie Linux.

Bibliotheken wie Qt und ihre Vorgänger einschließlich XVT bieten Quellcode-Ebene Querentwicklungsfähigkeit mit anderen Plattformen, während immer noch mit Microsoft C, um die Windows-Versionen zu bauen. Andere Compiler wie MinGW auch populär geworden in diesem Bereich, da sie mehr direkt kompatibel mit den Unix-Versionen, die die Nicht-Windows-Seite der Software-Entwicklung so die Entwickler, alle Plattformen mit einem vertrauten Erstellungsumgebung Ziel umfassen.

Free Pascal

Free Pascal war von Anfang an als ein Cross-Compiler entwickelt. Der Compiler ausführbare ist in der Lage, ausführbare Dateien für alle OS derselben Architektur. Zum Beispiel ist ppc386 in der Lage, ausführbare Dateien für i386-linux, i386-win32, i386-go32v2 und allen anderen Betriebssystemen. Für die Zusammenstellung auf eine andere Architektur besteht jedoch eine Quer Architektur Compilerversion zunächst aufgebaut werden. Die sich ergebende Compiler ausführbare würde zusätzliche "ross" haben, bevor der Zielarchitektur im Namen. dh, wenn der Compiler ist gebaut, um x64 Ziel, die ausführbare Datei dann wäre ppcrossx64 werden.

Um sich für einen gewählten Architektur-OS zu kompilieren, kann der Compiler-Schalter -P und -T verwendet werden. Dies wird auch die Erstellung der Compiler selbst, wenn Quer getan, aber wird über Make-Option CPU_TARGET und OS_TARGET gesetzt. GNU Assembler und Linker für die Zielplattform ist erforderlich, wenn Free Pascal noch nicht über interne Version der Tools für die Zielplattform.

  0   0
Vorherige Artikel Argus As 292
Nächster Artikel Tschebyscheff-Polynome

In Verbindung Stehende Artikel

Kommentare - 0

Keine Kommentare

Fügen Sie einen Kommentar

smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile
Zeichen übrig: 3000
captcha