Forum: Compiler & IDEs Fehlermeldung vom Linker: cannot find -lgcc_s


von gnu-arm (Gast)


Lesenswert?

Hallo,

ich habe meinen Code kompiliert und wenn ich nun den Linker wie 
nachfolgend aufrufe, bekomme ich diese Fehlermeldung:
1
/arm-linux-gnueabi/bin/ld: cannot find -lgcc_s
2
collect2: ld returned 1 exit status

Auch wenn ich in goolgle suche, sagt mir dieses Fehlermeldung immer noch 
nichts. Kann mir jemand sagen was diese Meldung überhaupt sagen soll?

: Verschoben durch User
von Oliver (Gast)


Lesenswert?

gnu-arm schrieb:
> und wenn ich nun den Linker wie
> nachfolgend aufrufe

wie ruftst du den denn auf? Zeig mal den ganze Aufruf.

Der Fehlermeldung nach gefällt ihm die option -lgcc_s
nicht, aber warum das so ist, keine Ahnung.

Oliver

von hp-freund (Gast)


Lesenswert?

Hast Du eine libgcc_s.so in deinem System?
Wenn ja, muss die auch vom Linker zu finden sein...

von gnu-arm (Gast)


Lesenswert?

Mein Aufruf im Makefile sieht so aus:
1
CC      = arm-linux-gnueabi-gcc
2
LINKFIL = lpc-rom.ld
3
LFLAGS  = -T $(LINKFILE) -nostartfiles --warn-common -n
4
5
6
$(APPNAME).elf: $(OBJS) $(LIBNAME).a $(LINKFILE)
7
    $(CC) $(OBJS) $(LIBNAME).a $(LFLAGS) -o $(APPNAME).elf -Wl,-Map,$(APPNAME).map


Eine libgcc_s.so hatte ich zwar schon im System, jedoch konnte er sie 
(glaube ich) nicht finden. Ich habe sie nun mal zum Testen in den Ordner 
mit dem Makefile kopiert. Die Fehlermeldungen sind allerdings die 
gleichen.

von Fitz (Gast)


Lesenswert?

Es wäre deutlich nützlicher, wenn Du den Aufruf des Compilers, wie
ihn "make" expandiert, zeigen würdest (einfach den Output eines "make" 
Laufs
zeigen). Das gezeigte Makefile-Fragment
passt nicht zu der Fehlermeldung in ersten Posting.

f.

von gnu-arm (Gast)


Lesenswert?

Ok, sorry. Ich versuche es noch mal. (Habe leider recht wenig Erfahrung 
mit makefiles)

Der Aufruf, wenn ich ihn von der Konsole aus verwenden würde:
1
arm-linux-gnueabi-gcc crt.o startup.o printf.o console.o bootloader.o usbstack.a -T lpc2148-rom.ld -nostartfiles --warn-common -n -o bl.elf -Wl,-Map,bl.map
2
3
/opt/emlix/hpp/lib/gcc/arm-linux-gnueabi/4.3.3/../../../../arm-linux-gnueabi/bin/ld: cannot find -lgcc_s
4
collect2: ld returned 1 exit status

Ich hoffe das ist so, wie du es gemeint hast.

von gnu-arm (Gast)


Lesenswert?

Ich habe mal den Pfad zu der Datei "libgcc_s.so" mit -L im Makefile 
angegeben. Der Aufruf sieht jetzt so aus:
1
arm-linux-gnueabi-gcc crt.o startup.o printf.o console.o bootloader.o usbstack.a -T lpc2148-rom.ld -nostartfiles --warn-common -n   -L/opt/emlix/hpp/sysroot/lib -o bl.elf -Wl,-Map,bl.map
2
3
/opt/emlix/hpp/lib/gcc/arm-linux-gnueabi/4.3.3/../../../../arm-linux-gnueabi/bin/ld: cannot find -lgcc_s
4
collect2: ld returned 1 exit status
5
make: *** [bl.elf] Fehler 1

Also finden sollte er die Datei jetzt auf jedem Fall.

von hp-freund (Gast)


Lesenswert?

Ich sehe da garnichts von arm... in deinem Pfad. Bist Du sicher das die 
Datei zum arm und nicht zum System gehört?

An sonsten versuch mal:

--disable-threads



http://www.spinics.net/lists/gcchelp/msg30215.html

von Oliver (Gast)


Lesenswert?

Was ist das denn für eine toolchain? Selbstgebaut?

Oliver

von gnu-arm (Gast)


Lesenswert?

hp-freund schrieb:
> Ich sehe da garnichts von arm... in deinem Pfad. Bist Du sicher das die
> Datei zum arm und nicht zum System gehört?
> An sonsten versuch mal:
> --disable-threads
> http://www.spinics.net/lists/gcchelp/msg30215.html

Recht herzlichen Dank für den Linkt. --disable-threads hat leider auch 
keine Änderung gebracht. Das es die richtige Lib ist, bin ich mir recht 
sicher. Unter dem gleichen Namen existiert zwar noch eine im gcc-Ordner 
für den x86-Chip von meinem PC, jedoch die hinzugelinkte Lib liegt 
befindet sich im gcc-Ordner der Toolchain (für den ARM). Eher habe ich 
mich schon gefragt ob es überhaupt eine lib ist. Die Änderung *.so 
verwirrt mich irgendwie. Sonst heißen sie doch immer *.a



Oliver schrieb:
> Was ist das denn für eine toolchain? Selbstgebaut?

Es ist eine fertige toolchain für ARM-Prozessoren, die bereits bei einem 
Kollegen zur Verfügung stand. Ich hatte mir die toolchain bereits auch 
schon selber gebaut und bin nach diesesn Vorgaben gegangen (Die 
übriegens gut beschrieben wurden. Vielleicht braucht sie ja noch 
jemand):
http://www.alphapogo.de/

Dort trat bereits der gleiche Fehler auf und ich dachte es liegt an 
einer falsch gebauten toolchain. (Deshalb der zweite Weg zu einer neuen 
toolchain)

von Martin T. (mthomas) (Moderator) Benutzerseite


Lesenswert?

Cross-Toolchain für Linux Targets ist keine allzu gute Idee für einen 
LPC2148, sofern dies wirklich der verwendete Controller ist. Erstmal mit 
einer arm-elf- oder arm-eabi Toolchain versuchen. Das gibt es fertig und 
gratis auch für Linux-Hosts unter anderem bei Codesourcery (CS G++ lite 
for ARM EABI).
Option -n ist mir gerade nicht erinnerlich, was nichts heißen mag aber 
möglicherweise nochmal einen Blick in die binutils und gcc Dokumentation 
wert ist.
Die Verwendung von shared libraries auf einem LPC2148 und ohne 
entsprechendes Betriebssystem im Controller ist keine wirklich gute 
Idee. Ohne ein solches System wird die gcc-Support-Library (wenn richtig 
erinnert für unwinding) auch nach erfolgreicher Suche und erzwungenem 
Anlinken bestenfalls Flash-Speicher verbrauchen.

von 23uhr (Gast)


Lesenswert?

Das hat mir geholfen:

Note to self: when you see

    /usr/bin/ld: cannot find -lgcc_s

again, do:

    sudo ln -s /lib/libgcc_s.so.1 /lib/libgcc_s.so


Von:
http://rbrusu.com/usrbinld-cannot-find-lgcc_s.html

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.