Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: RedEagle am 19. June 2007, 10:53
-
Ich bin auf Linux umgestiegen, und muss jetzt meine build-scripte meines Systems umschreiben.
Damit bin ich jetzt fast fertig, aber natürlich macht die letzte Zeile wieder Probleme ;)
Also:
Der relevante auszug aus ~/reos/kernel/link.txt
INPUT( ~/reos/kernel/kernelexe.obj
~/reos/kernel/_oop.obj
~/reos/kernel/kernel.obj
)
All 3 Dateien sind vorhanden.
Wenn ich jetzt
ld -T ~/reos/kernel/link.txt -o ~/reos/kernel/kernel.bin
ausführe (unter bash) bekomme ich die Meldung:
ld: cannot find ~/reos/kernel/kernelexe.obj
wo liegt das Problem??
ps.: verwende openSuSE 10.1
-
Wozu schreibst du denn die vollen Pfade in das Linkter-Skript?
Dort gehören auf jeden Fall relative Pfade rein, wenn du sie überhaupt dort angeben willst. Ich würde das eher mit Wildcards oder, falls du eh Make benutzt datit, erledigen.
-
was haßt relativ?? von der Postion des scriptes aus??
./kernelexe.obj verursacht selbiges Problem.
make benutze ich nicht.
-
es sollte (sogar ohne ./) gehen, wenn du den linker im verzeichnis ~/reos/kernel aufrufst.
-
nein, geht leider nicht :(
INPUT(
kernelexe.obj
_oop.obj
kernel.obj
)
RedEagle@linux-27ul:~/reos/kernel> ld -T ~/reos/kernel/link.txt -o ~/reos/kernel/kernel.bin
ld: skipping incompatible kernelexe.obj when searching for kernelexe.obj
ld: cannot find kernelexe.obj
RedEagle@linux-27ul:~/reos/kernel>
So wird übrigens die Datei erstellt:
nasm -f aout -o ~/reos/kernel/kernelexe.obj ~/reos/kernel/kernelexe.asm
Auffällig ist, das kernelexe.obj ein anderes icon hat, als die anderen *.obj-Dateien. Mach nasm möglicherweise etwas falsch??
-
Er sagt dir doch, was nicht stimmt:
ld: skipping incompatible kernelexe.obj when searching for kernelexe.obj
Er erkennt das Format nicht.
Du musst bei nasm folgendes angeben:
nasm -f elf -o ~/reos/kernel/kernelexe.obj /reos/kernel/kernelexe.asm
-
habe ich gerade im hex-editor gesehen ;)
Problem bleibt aber trotzdem bestehen (auch wenn das icon nun stimmt :) )
-
Hm, hast du ein 64-Bit system?
-
Linux? Ja
-
Dann musst du gcc und ld dazu bringen, keinen 64-Bit code zu erstellen, sonst versucht er 64-Bit ELF zu erstellen, der nasm macht aber 32-Bit ELF und die passen nich zusammen.
Beim ld müsste das ein "-m elf_i386" sein, und beim ld ein "-m32"
-
Nicht ganz on Tapic(aber ich wills halt ma loswerden):
es gibt jetzt uebrigens auch ne nasm version die 64-bit unterstuetzt. ist zar noch nicht stable aber es geht immerhin vorwaerz
http://nasm.sourceforge.net/
-
OK, Vielen Dank.
Es kommen zwar noch ein paar Fehler (Einige symbole werden nicht aufgelöst), das legt aber wahrscheinlich am Code selber.
DANKE
-
@M. Nemo:
Da kann man doch gleich yasm nehmen ;-)
@RedEagle:
Kein Problem.