Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: RedEagle am 19. June 2007, 10:53

Titel: Kann irgendwie nicht linken
Beitrag 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.objwo liegt das Problem??

ps.: verwende openSuSE 10.1
Titel: Re: Kann irgendwie nicht linken
Beitrag von: FreakyPenguin am 19. June 2007, 13:32
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.
Titel: Re: Kann irgendwie nicht linken
Beitrag von: RedEagle am 19. June 2007, 14:30
was haßt relativ?? von der Postion des scriptes aus??
./kernelexe.obj verursacht selbiges Problem.

make benutze ich nicht.
Titel: Re: Kann irgendwie nicht linken
Beitrag von: Jidder am 19. June 2007, 14:33
es sollte (sogar ohne ./) gehen, wenn du den linker im verzeichnis ~/reos/kernel aufrufst.
Titel: Re: Kann irgendwie nicht linken
Beitrag von: RedEagle am 19. June 2007, 15:23
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.asmAuffällig ist, das kernelexe.obj ein anderes icon hat, als die anderen *.obj-Dateien. Mach nasm möglicherweise etwas falsch??
Titel: Re: Kann irgendwie nicht linken
Beitrag von: FreakyPenguin am 19. June 2007, 15:32
Er sagt dir doch, was nicht stimmt:
Zitat
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
Titel: Re: Kann irgendwie nicht linken
Beitrag von: RedEagle am 19. June 2007, 15:51
habe ich gerade im hex-editor gesehen ;)
Problem bleibt aber trotzdem bestehen (auch wenn das icon nun stimmt :)  )
Titel: Re: Kann irgendwie nicht linken
Beitrag von: FreakyPenguin am 19. June 2007, 15:53
Hm, hast du ein 64-Bit system?
Titel: Re: Kann irgendwie nicht linken
Beitrag von: RedEagle am 19. June 2007, 16:05
Linux? Ja
Titel: Re: Kann irgendwie nicht linken
Beitrag von: FreakyPenguin am 19. June 2007, 16:19
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"
Titel: Re: Kann irgendwie nicht linken
Beitrag von: MNemo am 19. June 2007, 18:04
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/
Titel: Re: Kann irgendwie nicht linken
Beitrag von: RedEagle am 19. June 2007, 19:29
OK, Vielen Dank.
Es kommen zwar noch ein paar Fehler (Einige symbole werden nicht aufgelöst), das legt aber wahrscheinlich am Code selber.

DANKE
Titel: Re: Kann irgendwie nicht linken
Beitrag von: FreakyPenguin am 19. June 2007, 19:31
@M. Nemo:
Da kann man doch gleich yasm nehmen ;-)

@RedEagle:
Kein Problem.