Autor Thema: ld findet _start nicht  (Gelesen 6265 mal)

jgraef

  • Beiträge: 67
    • Profil anzeigen
Gespeichert
« am: 03. June 2008, 16:12 »
Hi,

Um Programme für meinOS zu linken benutze ich folgenden Befehl:
$ ld -o init init.o -T../link.ld -L../lib -lc -lmeinos -lgccDabei bekomme ich folgende Fehlermeldung:
Zitat
ld: warning: cannot find entry symbol _start; defaulting to 0000000000002000

Mein Problem ist nun, dass ich nicht weiß warum er _start nicht findet obwohl ich die entsprechende Datei dazulinke (ist in libc enthalten). Hier der Beweis:
$ nm libc.a | grep _start
00000000 T _start

ChristianF

  • Beiträge: 296
    • Profil anzeigen
    • DeutschOS - Betriebssystem Projekt
Gespeichert
« Antwort #1 am: 03. June 2008, 16:25 »
Hiho
So wie ich das aus der ld hilfe herauslese, gibst du mit der Option "-l" den Name der Bibliothek an, die geladen werden soll.
Da du aber nirgends die libc aufführst, wird diese wahrscheinlich auch nicht verwendet.
Probiere das ganze mal zusätzlich mit der Option -llibc, also folgendes:
ld -o init init.o -T../link.ld -L../lib -lc -lmeinos -lgcc -llibc

Gruß Christian
« Letzte Änderung: 03. June 2008, 16:27 von ChristianF »

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 03. June 2008, 17:17 »
Er gibt libc an mit -lc.

@jgraef
Das Problem kannste möglicherweise durch Umordnung/Mehrfachnennung der Libraries lösen oder aber einfach durch ein Umschließen mit --start-group ... --end-group:
ld -o init init.o -T../link.ld -L../lib --start-group -lc -lmeinos -lgcc --end-group
Dieser Text wird unter jedem Beitrag angezeigt.

jgraef

  • Beiträge: 67
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 03. June 2008, 19:27 »
Weder:
$ ld -o init init.o -T../link.ld -L../lib --start-group -lc -lmeinos -lgcc --end-groupnoch:
$ ld -o init init.o -lc -T../link.ld -L../lib -lc -lmeinos -lgccoder:
$ ld -o init init.o -lc -T../link.ld -L../lib --start-group -lc -lmeinos -lgcc --end-groupoder:
$ ld -o init init.o --start-group -lc -lmeinos -lgcc --end-group -T../link.ld -L../libbringt etwas. Immer noch gleiche Fehlermeldung.

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #4 am: 03. June 2008, 19:44 »
Könnte es sein, dass er die Host-libc nimmt und nicht deine eigene?
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

jgraef

  • Beiträge: 67
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 03. June 2008, 20:14 »
Hi,

Ich benutze einen Crosscompiler und -nostdlib bringt auch keine Besserung.

ChristianF

  • Beiträge: 296
    • Profil anzeigen
    • DeutschOS - Betriebssystem Projekt
Gespeichert
« Antwort #6 am: 04. June 2008, 08:18 »
Also so wie ich ld hier vor mit habe (mit Cygwin) sollte da ein Leerzeichen zwischen das -l und den Biblitheksname.
(Eine mögliche Ursache)
z.B.:
$ ld -o init init.o -lc -T../link.ld -L../lib -l c -l meinos -l gcc

Gruß Christian
 
PS: Ging das vorher die ganze Zeit so, oder hast du das vorher anders gelinkt?
« Letzte Änderung: 04. June 2008, 09:46 von ChristianF »

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #7 am: 04. June 2008, 13:55 »
Also so wie ich ld hier vor mit habe (mit Cygwin) sollte da ein Leerzeichen zwischen das -l und den Biblitheksname.
Nicht wirklich, siehe auch LD manual.

Ich denke eher, dass LD das Symbol nicht einbindet, weil es zu der Zeit zu der die .a durchsucht wird noch überhaupt nicht gebraucht wird...

edit: Ach richtig, in #lost haben wir darüber geredet und sind bis jetzt nur auf die Lösung gekommen, die Datei mit dem _start Symbol extra an ld zu übergeben (und aus der .a rausnehmen).
« Letzte Änderung: 04. June 2008, 13:57 von bluecode »
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

 

Einloggen