Autor Thema: Welche Compiler  (Gelesen 18795 mal)

timon

  • Beiträge: 13
    • Profil anzeigen
Gespeichert
« am: 10. December 2011, 09:02 »
Hallo Zusammen
Ich arbeite auf einem Windows System und möchte wissen welche Compiler /Linker/Assembler
ihr mir empfehlen würdet.
Ich kann C und Assembler programmieren und möchte mit diesen beiden Sprachen ein kleines OS schreiben.
Ich habe es bereits einmal versucht und gab das Projekt auf wegen Compiler Errors .

Danke für eure Hilfe

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 10. December 2011, 12:45 »
Der übliche Weg unter Windows ist eine MinGW-(Cross-)Toolchain zu nehmen (also gcc als Compiler und binutils für Assembler/Linker) und für die Buildumgebung zusätzlich noch MSYS.

Schau dir mal diesen Wikiartikel an: http://www.lowlevel.eu/wiki/Crosscompiler_für_Windows
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Sannaj

  • Beiträge: 103
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 10. December 2011, 13:15 »
Bei den Assemblern ist es genauso. Gas ist bei MinGW dabei, für Nasm, Fasm und Yasm gibt es Windowsportierungen.

timon

  • Beiträge: 13
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 10. December 2011, 14:07 »
Danke für eure Hilfe
Ich habe den Crosscompiler ausprobiert und er geht.
Eine Frage habe ich noch: Muss ich die
VBE vom Vm86 oder vom Realmode aus initialisieren?

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 10. December 2011, 14:16 »
Funktioniert beides.

Ich würde aber empfehlen, am Anfang noch nicht in einen Grafikmodus zu wechseln, weil das das Debugging wesentlich schwieriger macht. Eine Textmodus-Fehlermeldung auf den Bildschirm zu bringen funktioniert fast immer, aber damit das gleiche im Grafikmodus geht, muss wesentlich mehr Code funktionieren. Und wenn es eine Fehlermeldung gibt, dann funktioniert ja meistens eben gerade nicht mehr alles wie es soll.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

timon

  • Beiträge: 13
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 10. December 2011, 16:22 »
OK das mit dem Grafikmodus probiere ich noch nicht.
Habt ihr eine genauere Anleitung wie das mir dem Cross-Compiler geht? Ich verstehe ihn doch nicht ganz.

DerHartmut

  • Beiträge: 236
    • Profil anzeigen
    • Mein Blog
Gespeichert
« Antwort #6 am: 12. December 2011, 10:34 »
Vielleicht magst du einfach mal hier beginnen: OS-Dev für Einsteiger - von dort aus kannst du dich einfach weiterarbeiten.
$_="krJhruaesrltre c a cnp,ohet";$_.=$1,print$2while s/(..)(.)//;
Nutze die Macht, nutze Perl ;-)

Dimension

  • Beiträge: 155
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 12. December 2011, 15:45 »
Ich will ja ncht unhöflich sein, aber ich habe gute Erfahrungen gemacht mit den inline-Assemblern von GCC (leider AT&T-Syntax) bzw. von MS Visual CPP. Irgendwie kann man beim neuen GCC auch auf Intel-Syntax stellen, aber das muss am Ende des ASM-Abschnitts wieder rückgängig gemacht werden.

DerHartmut

  • Beiträge: 236
    • Profil anzeigen
    • Mein Blog
Gespeichert
« Antwort #8 am: 12. December 2011, 17:22 »
Um meinen vielgeschätzten Kollegen Clici McXan zu zitieren:

Zitat von: Clici McXan
Soll der gcc Intelcode generieren, musst du nur „-masm=intel“ appendizieren!
$_="krJhruaesrltre c a cnp,ohet";$_.=$1,print$2while s/(..)(.)//;
Nutze die Macht, nutze Perl ;-)

Sannaj

  • Beiträge: 103
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 12. December 2011, 21:18 »
Das Umschalten des Syntax erfolgt über das Assemblerdirektiven
.intel_syntax noprefixund
.att_syntax prefoxHierbei bedeutet .intelsyntax das der Intelsyntax benutzt wird und nopräfix, das die Register ohne vorrangestelltes "%" angesprochen werden können. Der Assembler nimmt zu Beginn AT&T Syntax an.
Zu beachten ist, das gcc, diese Option nicht kennt oder irgendwie bearbeitet. (Gcc hat überhaupt keine Ahnung was die Inline Assemblerbefehle bedeuten.) Aus diesem Grund muss der Assembler am Ende des Aufrufs wieder auf das eingestellte Emitdirektiv (normal AT&T-syntax, mit „-masm=intel“ Intelsynatx) umgestellt werden.

FlashBurn

  • Beiträge: 844
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 12. December 2011, 21:51 »
Ich weiß nicht ob es schwieriger ist einfach nen Linux in einer VM aufzusetzen und dort den vorhandenen GCC zu nutzen. Kann dafür nur den VMWare-Player empfehlen, einfach die Tools installieren und man kann dann nen Shared-Ordner anlegen, unter Windows coden und unter Linux (in der VM) kompilieren. Bei mir ist das ganze um das 3.5fache schneller.

Sannaj

  • Beiträge: 103
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 15. December 2011, 20:21 »
Ich weiß nicht ob es schwieriger ist einfach nen Linux in einer VM aufzusetzen und dort den vorhandenen GCC zu nutzen. Kann dafür nur den VMWare-Player empfehlen, einfach die Tools installieren und man kann dann nen Shared-Ordner anlegen, unter Windows coden und unter Linux (in der VM) kompilieren. Bei mir ist das ganze um das 3.5fache schneller.
Könntest du auch machen. Ist aber mit Abstand lahmer (Compilieren ist harte CPU-Arbeit) und weniger elegant. MinGW funktioniert für das reine Compilieren von Programmen gut, und ist auch nicht als so schwer aufzusetzen, gcc, g++, gccirgentwas, gdb und die Binuits werden unterstützt und laufen ziemlich vernünftigt. msys stellt eine vernünfige Umgebung (Pfade, Shell zu Verfügung). Schwierig wird es natürlich wenn du Python (Mein Remote-control-Shellscript klappt hierbei nicht immer richtig, bei git und fbc aber schon.), oder irgendwelche ausgefallenen Sachen wie iso-maker, usw. brauchst.

FlashBurn

  • Beiträge: 844
    • Profil anzeigen
Gespeichert
« Antwort #12 am: 15. December 2011, 21:04 »
Zitat von: Sannaj
Könntest du auch machen. Ist aber mit Abstand lahmer (Compilieren ist harte CPU-Arbeit) und weniger elegant. MinGW funktioniert für das reine Compilieren von Programmen gut, und ist auch nicht als so schwer aufzusetzen, gcc, g++, gccirgentwas, gdb und die Binuits werden unterstützt und laufen ziemlich vernünftigt. msys stellt eine vernünfige Umgebung (Pfade, Shell zu Verfügung).
Eben nicht, es ist bei mir um das 3.5fache schneller! Eben weil unter mingw noch der kanze POSIX-Layer KRams emuliert werden muss und das kostet richtig Zeit. Ich hätte das so auch nicht gedacht, da ich aber den neuen clang unter mingw nicht kompiliert bekommen haben und sowieso schon Linux in einer VM hatte, habe ich das mal ausprobiert und mache es jetzt nur noch so.

Zumal wenn man ne halbwegs aktuelle CPU hat die Hardwareunterstützung für das Virtualisieren bietet, ist der Geschwindigkeitsverlust vernachläßigbar.

Sannaj

  • Beiträge: 103
    • Profil anzeigen
Gespeichert
« Antwort #13 am: 18. December 2011, 19:09 »
Naja du hast recht. Ich hab unter MinGW noch nichts gescheites Compiliert bekommen. Meinen Clang hab ich mir unter Linux gebaut.

Alphaleath

  • Beiträge: 3
    • Profil anzeigen
Gespeichert
« Antwort #14 am: 23. January 2012, 15:32 »
In der c't 3/12 ist ein sehr gutes Tutorial für eine Portable Eclipse-Umgebung mit dem GCC-Toolchain. Aber trotzdem würde ich für OS-Entwicklung ein Linux nehmen. Das kannst du ja in einer VM laufen lassen oder Parallel zum Win installieren.

TheThing

  • Beiträge: 105
    • Profil anzeigen
Gespeichert
« Antwort #15 am: 25. January 2012, 11:13 »
Ich habe früher mein OS auch immer in einer VM kompiliert. Ich fand das früher aber ziemlich eklig die Code-Files in die VM zu kriegen und das Kompilat wieder raus.
Da ich mittlerweile git benutze und auch ein Notebook mit Linux mein eigen nenne geht das jetzt besser ;)
Ich habe mich damals für Linux entschieden da ich dort am wenigstens Aufwand mit der Umgebung hatte (ELF wird unterstützt, ich hab direkt gcc) und ich sowieso Linux mehr mag. Letztendlich ist die Frage nach dem Compiler und dem OS Geschmackssache.
Das mit der Geschwindigkeit bei MinGW stimmt, im Vergleich zum Linux-gcc ist es sehr langsam. Selbst gcc auf meinem P4 mit 2.8 GHz schlägt den MinGW auf meinem Core 2 um Längen. Das hat eben damit zu tun dass gcc eigentlich für eine POSIX-Umgebung ausgelegt ist und unter Windows da jede Menge Kompatibilitätskram dazwischenhängt.
Noch langsamer ist bei mir mingw64, sowohl in der 32- als auch in der 64-Bit Version (ich benutze ein personal build von gcc 4.6.2 mit std::thread-Unterstützung aufgrund eines anderen Projektes von mir). Die erzeugten Programme jedoch sind bei allen drei Varianten bei mir schneller als mit VC++ erzeugte.

Je nach Geschmack kommen in diesem Fall also entweder eine VM mit Linux+gcc oder ein Cross-MinGW infrage. Ich bevorzuge Linux+gcc, aber das ist eine Entscheidung die man selbst treffen muss.
In Sachen Assembler fiel meine Wahl auf nasm. Manche mögen vielleicht schief gucken, weil ich unter die gcc-Familie nasm mische, aber ich kam mit nasm bisher super klar und es war auch der erste den ich je benutzt habe.
« Letzte Änderung: 25. January 2012, 11:16 von TheThing »

stultus

  • Beiträge: 486
    • Profil anzeigen
Gespeichert
« Antwort #16 am: 25. January 2012, 21:16 »
Bei der ganzen VM-Diskutiererei (übrigens auch meine präferierte Lösung - msys, mingw und crosscompiler dauert wirklich bis das gescheit läuft), wieso bleibt ihr zum editieren alle unter Windows? Mit halbwegs modernen Maschinen (Von Hardwarevirtualisierung geh ich mal aus, ohne macht das nicht soo den Spaß) ist das an sich kein Problem auch noch die grafische Oberfläche und nen Editor mitzuziehen. Copy&Paste geht dank der Gasterweiterungen unter allen gängigen Emulatoren auch wunderbar.

Als Virtualisierungslösung würde ich übrigens VirtualBox empfehlen, gibts ohne Registrierung, und tut wasses soll ohne zuviel mitzubringen (VMWare ist halt eher für professionelle Anwendung ausgelegt).
MSN: planetconquestdm@hotmail.de
ICQ: 190-084-185

... Wayne?

FlashBurn

  • Beiträge: 844
    • Profil anzeigen
Gespeichert
« Antwort #17 am: 25. January 2012, 21:23 »
Also VBox kann ich gar nicht empfehlen. Denn darin läuft mein OS nicht ;)

Aber der VMWare Player ist eigentlich super, vorallem halt mit den Gasterweiterungen.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #18 am: 26. January 2012, 09:54 »
Wie wär's einfach mit direkt Linux auf dem Host? ;)

Also VBox kann ich gar nicht empfehlen. Denn darin läuft mein OS nicht ;)
Und welche Seite ist buggy? ;)
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

FlashBurn

  • Beiträge: 844
    • Profil anzeigen
Gespeichert
« Antwort #19 am: 26. January 2012, 10:48 »
Zitat von: taljeth
Und welche Seite ist buggy? ;)
VBox ;) Denn in allen anderen Emulatoren/VMs und auf richtigen PCs läuft der Code ohne Probleme. Ich weiß sogar ziemlich sicher dass es etwas mit den GS und FS-Registern zu tun hat.

 

Einloggen