Forum: Compiler & IDEs gcc problem/unklarheit: link libs/pfade


von Vlad T. (vlad_tepesch)


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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von Vlad T. (vlad_tepesch)


Lesenswert?

na so ein qatsch *kopfschüttel* 

Trotzdem danke.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Vlad Tepesch schrieb:
> na so ein qatsch

Was ist denn daran Quatsch?  Die -l-Optionen sind doch dafür da,
Standardbibliotheken einzubinden.  Wenn du die Bibliotheken sowieso
explizit angeben willst, bietet doch die -l-Option keinerlei Vorteil
gegenüber der direkten Angabe.

von Rolf M. (rmagnus)


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.

von Vlad T. (vlad_tepesch)


Lesenswert?

sie hat keinen anderen namen, sie hat kein "lib" vornedran, es geht auch 
nicht darum, dass ich sie nicht einhalten will. Bibliotheken, von denen 
ich abhängig bin halten ihn nicht ein.

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.