Probleme bein Linken

Scorpion

Aktives Mitglied
Thread Starter
Dabei seit
03.02.2005
Beiträge
106
Reaktionspunkte
0
Hallo,

ich wusste nicht richtig, ob das noch in den Bereich Unix fällt oder schon zur Programmierung fällt, ich hab es einfach mal hier reingeschrieben.

Seit einiger Zeit bin ich schon dran ein kleines OS für die i386 Plattform zu schreiben. Mein Bootloader in Assembler geschrieben läuft ohne Probleme, jetzt wollte ich aber mit C weitermachen und da gibt es ein kleines Problem mit dem Linken. Ich habe dazu auch schonmal ein Tutorial durchgesehen, hier der Link dazu, ist leider englisch.

Jetzt zum eigentlichen Problem:

Damit ich die verschiedenen Dateien wie die Assembler-Datei, die die C-Datei lädt, am Ende zusammenbringen kann, brauche ich ja den Linker. So jetzt hier der Ausschnitt aus dem Tutorial:

nasm -f aout kernel_start.asm -o ks.o

Hier wird eine *.o Datei aus der Datei erstellt, die später das C-Programm laden soll. So weit, so gut, nasm habe ich schon seit längerem auf unter OS X zum Laufen gebracht.

gcc -c kernel.c -o kernel.o

Hier geschieht das Gleiche wie oben mit der C-Datei.

ld -T link.ld -o kernel.bin ks.o kernel.o

Und hier ist nun das Problem, gebe ich das nun im Terminal ein, kommt folgender Fehler:

ld: unknown flag: -T


Was hat das zu bedeuten?


Scorpion
 
Zuletzt bearbeitet von einem Moderator:
Ganz einfach. Es gibt keine Option -T. Die Optionen kenne ich jetzt auch nicht. Aber die stehen auch alle in der Manpage. (man ld)
 
Hallo,

mir ist klar, dass ld die Option nicht erkennt, in einer Manpage im Internet tritt die Opetion -T bzw. --script jedoch auf

-T scriptfile
--script=scriptfile
Use scriptfile as the linker script. This script replaces ld's default linker script (rather than adding to it), so commandfile must specify everything necessary to describe the output file. If scriptfile does not exist in the current directory, "ld" looks for it in the directories specified by any preceding -L options. Multiple -T options accumulate.

Nur scheint das hier nicht zu funktionieren, meine eigentlich Frage daher, wie kann ich die Dateien jetzt linken und auch das script verwenden?


Scorpion
 
Hallo,

ich habe das jetzt erst einmal ohne das Skript gemacht und selbst daran scheiter es schon...

gcc ks.o kernel.o -o test.bin
/usr/bin/ld: ks.o bad magic number (not a Mach-O file)
collect2: ld returned 1 exit status

Das ist im Prinzip genau das selbe wie oben nur eben ohne das Skrip, habe es auch schon direkt mit ld versucht, der gleiche Fehler.

Wie kann ich denn diese 2 Dateien linken oder gibt es vielleicht noch einen anderen Linker? Ich habe bisher nur einen gefunden, der mir Binär-Dateien ausgeben kann, der ist jedoch nur für Win.



Scorpion
 
Hallo,

ich habe das jetzt zum Laufen gebracht. Leider ging es ohne VPC nicht.
Ich Muss die Dateien nun mit VPC unter Win 98 kompilieren und linken, das geht zwar um einiges langsamer, aber es geht.


Scorpion
 
Scorpion schrieb:
/usr/bin/ld: ks.o bad magic number (not a Mach-O file)

Dein Mac OS X/PPC-Linker beschwert sich, dass Du ihn mit einem Objektfile benutzen willst, das nicht in seinem Format ist.

Ich weiss ja nicht was Du Dir gedacht hast was ld macht, aber ein mit Mac OS X-ld gelinktes Programm hilft Dir mit einem i386-Rechner nicht weiter... genausowenig ein mit Mac OS X/PPC-gcc übersetztes C-Programm.
 
Zuletzt bearbeitet:
Hallo,

mir ist schon klar, dass gcc unter OS X die Dateien für die PPC-Plattform übersetzt.

Ich hatte auch mehr darauf gehofft, dass jemand vielleicht einen Compiler kennt, der unter OS X *.o-Dateien für i386 erstellen kann.

Trotzdem Danke, es geht ja mit VPC recht erträglich.


Scorpion
 
Zurück
Oben Unten