Seite 1 von 2

Linux: .so automatisch zu einer anderen .so linken lassen

Verfasst: Mo Mär 12, 2012 2:12 pm
von fat-lobyte
Hallo!

Eine kurze Frage:
Nehmen wir an, ich habe eine dynamische Bibliothek A, mit dem Namen libA.so.1.
Des weiteren habe ich eine Bibliothen B, mit dem Namen libB.so.1, zu der libA.so.1 gelinkt wurde, also beim Linken wurde das Flag -lA übergeben.

Nun will ich ein Programm kompilieren, und linke nur mit libB.so.1 (-lB).
Sollte nun libA.so.1 nicht automatisch zum Programm dazugelinkt werden? Im moment bekomme ich nämlich vom Linker zurückgegeben, dass Symbole fehlen. Wenn ich allerdings "-lB -lA" angebe, dann ist alles in Ordnung.

Hab ich da was missverstanden?

Re: Linux: .so automatisch zu einer anderen .so linken lasse

Verfasst: Mo Mär 12, 2012 2:26 pm
von Xin
Benutzt Du selbst Funktionen aus libB?

Re: Linux: .so automatisch zu einer anderen .so linken lasse

Verfasst: Mo Mär 12, 2012 3:53 pm
von fat-lobyte
Xin hat geschrieben:Benutzt Du selbst Funktionen aus libB?
Ja, das Programm benutzt Symbole aus libB.
libB selbst benutzt Symbole aus libA, aber das Programm benutzt direkt keine Symbole aus libA.

Re: Linux: .so automatisch zu einer anderen .so linken lasse

Verfasst: Mo Mär 12, 2012 3:59 pm
von Xin
fat-lobyte hat geschrieben:
Xin hat geschrieben:Benutzt Du selbst Funktionen aus libB?
Ja, das Programm benutzt Symbole aus libB.
libB selbst benutzt Symbole aus libA, aber das Programm benutzt direkt keine Symbole aus libA.
Sehr schön, das ist die Information, die ich zwar nicht auf die Frage passt, aber die ich wissen wollte.

Dann habe ich keine Ahnung. :-)

Da eine statische Library allerdings nicht komplett gelinkt wird, kann es natürlich auch einfach daran liegen, dass ihm das -l Argument im ersten Schritt egal ist, bzw. er einen zusätzlichen Schalter braucht?

Re: Linux: .so automatisch zu einer anderen .so linken lasse

Verfasst: Mo Mär 12, 2012 4:06 pm
von fat-lobyte
Xin hat geschrieben:Da eine statische Library allerdings nicht komplett gelinkt wird
In diesem Beispiel ist alles dynamisch.
Xin hat geschrieben:kann es natürlich auch einfach daran liegen, dass ihm das -l Argument im ersten Schritt egal ist, bzw. er einen zusätzlichen Schalter braucht?
Das dachte ich mir auch schon, allerdings habe ich in die Ausgabe von "ldd libB.so" gekuckt, und dort ist "libA.so" korrekt aufgelistet.

An unsere Linker-experten: Wie kann ich ld anbetteln meine lib zu linken?

Re: Linux: .so automatisch zu einer anderen .so linken lasse

Verfasst: Di Mär 13, 2012 7:20 pm
von oenone
Du musst immer alle angeben. Deshalb musst du auch bei Gtk+ immer so viel mit übergeben. Zum Glück kann da man die linker-Flags durch pkg-config ermitteln:

Code: Alles auswählen

$ pkg-config gtk+-2.0 --libs
-pthread -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lrt -lglib-2.0  
wenn eins fehlt, wirds nicht klappen.

Re: Linux: .so automatisch zu einer anderen .so linken lasse

Verfasst: Di Mär 13, 2012 11:08 pm
von fat-lobyte
Ok, danke für die Antwort. Leider bin's nicht ich der die Flags übergibt, sondern der Compiler (Clang). libA ist übrigens libc++abi und libB ist libc++.
Das bedeutet, ich muss jetzt jedes mal beim kompilieren noch zusätzlich "-lc++abi" angeben.

Naja, danke für die Hilfe, ich geh mich mal auf der Mailingliste beschweren :-)

Re: Linux: .so automatisch zu einer anderen .so linken lasse

Verfasst: Mi Mär 14, 2012 10:13 am
von Kerli
Ich vermute es hat schon seine Gründe, dass das nicht automatisch passiert. Es braucht ja selber nicht unbedingt immer die verwendeten Bibliotheken einer gelinkten Bibliothek. Was wäre wenn eine Bibliothek in unterschiedlichen Versionen existiert und einmal zb zu Qt und einmal zu wxWidgets gelinkt ist. Wenn du jetzt Qt/wxWidgets zu deiner eigenen Bibliothek/Programm linken würdest könntest du nachher nicht mehr die .so mit der jeweils anderen verlinkten Bibliothek verwenden ohne sie auch zu installieren. Kurz also, es würde vermutlich viele unerwünschte Abhängigkeiten bringen.

Re: Linux: .so automatisch zu einer anderen .so linken lasse

Verfasst: Mi Mär 14, 2012 7:30 pm
von oenone
Und wenn du clang++ nimmst? Das sollte doch das C++-Zeugs automatisch dazulinken?

Re: Linux: .so automatisch zu einer anderen .so linken lasse

Verfasst: Mi Mär 14, 2012 8:15 pm
von fat-lobyte
oenone hat geschrieben:Und wenn du clang++ nimmst? Das sollte doch das C++-Zeugs automatisch dazulinken?
Das "C++-Zeugs" ist libc++, aber nicht libc++abi. libc++abi sollte an libc++ angehängt werden, das ging aber nicht - so dachte ich.
Jetzt habe ich ein anderes Build-System verwendet, und jetzt gehts auf einmal doch! Ich bin jetzt verwirrt und muss mal was proof-of-conceptiges implementieren.