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.cIf you recieved no errors then enter the command
[view code in window]
ld -Ttext 0x100000 --oformat binary -o kernel32.bin kernel32.ound 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