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

Schnelle objektorientierte, kompilierende Programmiersprache.
Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

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

Beitrag von fat-lobyte » Mo Mär 12, 2012 2:12 pm

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?
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

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

Beitrag von Xin » Mo Mär 12, 2012 2:26 pm

Benutzt Du selbst Funktionen aus libB?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

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

Beitrag von fat-lobyte » Mo Mär 12, 2012 3:53 pm

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.
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

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

Beitrag von Xin » Mo Mär 12, 2012 3:59 pm

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?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

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

Beitrag von fat-lobyte » Mo Mär 12, 2012 4:06 pm

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?
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
oenone
Beiträge: 223
Registriert: Do Sep 01, 2011 2:42 pm
Wohnort: Bremen
Kontaktdaten:

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

Beitrag von oenone » Di Mär 13, 2012 7:20 pm

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.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

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

Beitrag von fat-lobyte » Di Mär 13, 2012 11:08 pm

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 :-)
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

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

Beitrag von Kerli » Mi Mär 14, 2012 10:13 am

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.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
oenone
Beiträge: 223
Registriert: Do Sep 01, 2011 2:42 pm
Wohnort: Bremen
Kontaktdaten:

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

Beitrag von oenone » Mi Mär 14, 2012 7:30 pm

Und wenn du clang++ nimmst? Das sollte doch das C++-Zeugs automatisch dazulinken?

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

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

Beitrag von fat-lobyte » Mi Mär 14, 2012 8:15 pm

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.
Haters gonna hate, potatoes gonna potate.

Antworten