gcc problem/unklarheit: link libs/pfade

#4010229
Lesenswert?

Ich hab folgendes Problem:

Ich baue ein executable mit dem gcc (genauer dem 
arm-linux-gnueabihf-gcc) unter linux.

ich muss, um das fertige Executable zu bekommen ein paar libs 
dazulinken.

Das scheint solange zu funktionieren, solange sie Namen im Format 
"libNAME.a"
Einige heißen aber anders und der dumme gcc findet sie nur, wenn ich sie 
mit ihrem vollen Pfad ohne '-l' wie ein normales objectfile übergebe. Er 
sucht scheinbar nicht in den -L-Pfaden

Frage 1: kann ich das irgendwie umgehen?
Frage 2: Gibts einen anderen Unterschied, wie die intern vom Linker 
behandelt werden, (also objectfile vs. -l)?


viele Grüß aus Berlin
Moderator Persönliche Seite #4010249
Lesenswert?

Vlad Tepesch schrieb:

> Einige heißen aber anders und der dumme gcc findet sie nur, wenn ich sie
> mit ihrem vollen Pfad ohne '-l' wie ein normales objectfile übergebe. Er
> sucht scheinbar nicht in den -L-Pfaden

„Hajo, so isch des.“

„-lfoo“ heißt: „Suche in den durch -L vorgegeben Pfaden, danach in den
eingebauten Pfaden nach einer Bibliothek namens libfoo.a.“

> Frage 1: kann ich das irgendwie umgehen?

Hast du ja schon: auf der Kommandozeile komplett angeben.

> Frage 2: Gibts einen anderen Unterschied, wie die intern vom Linker
> behandelt werden, (also objectfile vs. -l)?

Es gibt Unterschiede in der Behandlung zwischen Objektdatei und
Bibliothek (Objektdateien werden immer gelinkt, aus Bibliotheken
werden nur die Module gelinkt, die dazu beitragen, an dieser Stelle
ein bislang undefiniertes Symbol aufzulösen), aber es gibt keinen
Unterschied, ob die Bibliothek mittels -l/-L gesucht worden ist oder
direkt in der Kommandozeile angegeben ist.
#4010847
Lesenswert?

Ich verstehe außerdem nicht, warum die unbedingt einen anderen Namen 
haben muss. Was ist denn an der Endung auf .a so schlimm? Der Compiler 
fordert auch, daß ohne explizite Angabe der Sprache per 
Kommandozeilenparameter der Name einer C-Datei auf .c endet.
Oder anders: Die Option -l bietet einen gewissen Automatismus. Dafür 
gibt es bestimmte Vorgaben an den Namen. Wenn du die nicht einhalten 
willst, musst du eben die Variante ohne Automatismus nehmen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren