2009-08-06 13 views
1

Ich habe ein Programm, das statisch zu einer Bibliothek (libA.2.0.a) verbindet und auch dynamisch eine andere Bibliothek verbindet (libB.so). libB.so verknüpft auch dynamisch mit einer älteren Version von libA (libA.1.0.so).Statisch und dynamisch verbindet die gleiche Bibliothek

Ist diese Konfiguration möglich? Und wenn ja, wie kann das System die Symbole von libA.2.0.a für mein Programm und die Symbole von libA.1.0.so für libB.so verwenden?

Antwort

5

Ja, diese Konfiguration ist möglich.

In Beantwortung Ihrer Frage, wie das System weiß, wie die Symbole zu verwenden sind, denken Sie daran, dass alle Verknüpfungen zur Erstellungszeit auftreten. Nach dem Aufbau geht es nicht um "Symbole", sondern nur um verschiedene Funktionen an verschiedenen Adressen.

Beim Erstellen von libB.so werden die Links zu libA.1.0.so eingerichtet. Es weiß nicht, was andere Anwendungen, die es verwenden, tun werden, es weiß, wie es seine eigenen Funktionsaufrufe abbildet.

Beim Erstellen der Anwendung selbst verbindet sich die Anwendung mit libB.so. Was immer libB.so aufruft, ist der Anwendung völlig unbekannt. Die Anwendung verbindet sich auch statisch mit einer Bibliothek, die libB.so nicht interessiert.

Eine Frage: Wenn libA statische Variablen verwendet, gibt es einen Satz von Statiken, die für libB.so zugänglich sind, und einen anderen, unabhängigen Satz von Statiken, der für die Anwendung zugänglich ist.

+0

Danke für die Klarstellung! Sehr nützliche Information. –

Verwandte Themen