DJGPP Problem



  • Hi
    Ich bin noch ein ziemlicher Anfänger, aber könnte mir bitte bitte jemand sagen, wie ich mit DJGPP Dateien kompilieren/linken kann, die dann Betriebssystem-unabhängig sind? (Ich glaube, das sind *.com dateien).

    Schonmal Danke
    Felix



  • Von so einem Format musst du wohl geträumt haben oder ein Javaprogrammierer hat dich veräppelt.

    Realtität ist, dass du für jede Platform deinen Source Code neu übersetzen musst.

    (*.COM ist irgend ein MS-DOS Binär Format und absolut nicht Platformunabhängig!)



  • kingruedi: er hat gesagt betriebssystemunabhängig, nicht plattformunabhängig. COM-Dateien sind insofern OS-unabhängig, als dass sie ein reiner Binärdump sind, der keinen Header hat. Die einzige Anforderung ist, dass das Programm so geladen wird, dass der erste Befehl an Stelle CS:0100h steht. Das ist, wenn man keine richtigen Binärfiles ohne diese Einschränkung erzeugen kann, immer noch recht gut für Betriebssystemkernels und dergleichen. Besser als EXE- oder ELF-Dateien auseinanderzufummeln.

    DJGPP kann wahrscheinlich kein .COM, aber ein richtiges Binärformat müsste er schon können, weil er ein gcc-Port ist und der gcc den Linux-Kernel compilieren kann.



  • Bashar schrieb:

    DJGPP kann wahrscheinlich kein .COM, aber ein richtiges Binärformat müsste er schon können, weil er ein gcc-Port ist und der gcc den Linux-Kernel compilieren kann.

    Genau das meinte ich, aber wie kann ich denn mit DJGPP eine richtige Binärdatei compilieren??



  • a'so, dass ist relativ leicht und wird über den Linker gemacht.

    So geht das mit dem GCC

    > g++ -c (weitere Flags) foo.cc
    > ld -Ttext 0x00100000 -e main -oformat binary foo.o
    


  • Danke, aber mit deinem Code gibt es ein kleines Problem:
    Die erste Zeile funzt reibungslos, aber bei der zweiten (also ld -Ttext 0x00100000 -e main -oformat binary foo.o) kommt immer:
    c:/djgpp/bin/ld.exe cannot open binary: No such file or directory (ENOENT)
    Dabei bin ich aber 100% sicher (ich habs mehrmals überprüft) dass in dem Verzeichnis die Datei foo.o existiert (also nach ausführung der ersten Zeile) Woran kann das liegen?



  • hi

    hiermit kommst du ev. weiter:

    http://www.osjournal.hopto.org/cgi-bin/index.pl?action=viewfile&file=14

    int main(void)
    {
    repeat:
    goto repeat;
    }

    Save as "kernel32.c" . From the same location as the file enter the command

    [view code in window]
    gcc -ffreestanding -c -o kernel32.o kernel32.c

    If you recieved no errors then enter the command

    [view code in window]
    ld -Ttext 0x100000 --oformat binary -o kernel32.bin kernel32.o

    und hier natürlich

    http://www.delorie.com/gnu/docs/binutils/ld_66.html

    wenn du ein wenig rumschaust, kommen noch einige ähnliche adressen im netz.

    ps: doppelstrich for oformat



  • THX für den Link und für die Tipps jetzt hab ich das endlich mal begriffen


Anmelden zum Antworten