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
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.