Das Verständnis, wie die dynamische Verknüpfung funktioniert auf UNIX

Betrachten wir die folgende situation:

  • ein Programm mit dem Namen program welcher von dynamisch auf libfoo.so
  • libfoo.so das hängt davon ab, nichts (gut, es hängt davon ab libstdc++ und so, aber ich denke, wir können weglassen, die)

program läuft perfekt.

Plötzlich libfoo codes ändert, und eine Funktion verwendet jetzt intern func_bar() eine Funktion, die von einer anderen Bibliothek libbar.so.

libfoo.so ist neu kompiliert und jetzt hängt libbar.so. program bleibt unverändert, es hängt immer noch nur auf libfoo.so.

Wenn ich jetzt ausführen program es beklagt, dass er nicht finden können func_bar().

Hier sind meine Fragen:

  • libfoo.so Schnittstelle nicht ändern, nur deren Umsetzung. Warum program müssen ausdrücklich link mit libbar.so ?
  • Ist nicht die Abhängigkeit, Baum-rekursiv ? Ich würde denken, dass da libfoo.so hängt libbar.so, libbar.so würde wurden automatisch Hinzugefügt, um die Abhängigkeit Liste der program, ohne Neukompilierung. Allerdings ldd program zeigt, dass es nicht der Fall ist.

Scheint es seltsam, dass man neu kompilieren ("erneut verknüpfen") jeder binäre das hängt davon ab, einige Bibliothek-everytime, die Bibliothek, die Abhängigkeiten ändern. Welche Lösungen habe ich hier um dies zu verhindern ?

  • Kannst du eine minimale Konfiguration, die das problem reproduziert? vitaut ' s Kommentare nach seinem post scheinen zu beschreiben, den gleichen Prozess und kommt nicht an das gleiche problem. Vielleicht, wenn Sie einfache Schritte, dass wir helfen konnten mit der Beantwortung der Frage?
InformationsquelleAutor ereOn | 2010-11-05
Schreibe einen Kommentar