Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: jgraef am 03. June 2008, 16:12

Titel: ld findet _start nicht
Beitrag von: jgraef 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
Titel: Re: ld findet _start nicht
Beitrag von: ChristianF 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
Titel: Re: ld findet _start nicht
Beitrag von: Jidder 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
Titel: Re: ld findet _start nicht
Beitrag von: jgraef 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.
Titel: Re: ld findet _start nicht
Beitrag von: bluecode am 03. June 2008, 19:44
Könnte es sein, dass er die Host-libc nimmt und nicht deine eigene?
Titel: Re: ld findet _start nicht
Beitrag von: jgraef am 03. June 2008, 20:14
Hi,

Ich benutze einen Crosscompiler und -nostdlib bringt auch keine Besserung.
Titel: Re: ld findet _start nicht
Beitrag von: ChristianF 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?
Titel: Re: ld findet _start nicht
Beitrag von: bluecode 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 (http://sourceware.org/binutils/docs/ld/Options.html#Options).

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).