Frage

Ich habe ein Programm, das zu einer Bibliothek (libA.2.0.a) statisch verknüpft ist und auch Links dynamisch in einer anderen Bibliothek (libB.so). libB.so auch Links dynamisch zu einer älteren Version von Liba (libA.1.0.so).

Ist diese Konfiguration möglich? Und wenn ja, wie funktioniert das System kennt die Symbole aus libA.2.0.a für mein Programm und die Symbole aus libA.1.0.so für libB.so zu benutzen?

War es hilfreich?

Lösung

Ja, diese Konfiguration ist möglich.

In Antwort auf Ihre Frage, wie das System weiß, wie die Symbole zu verwenden, denken Sie daran, dass alle Links zu Erstellungszeitpunkt ergibt. Nachdem es gebaut wurde, ist es nicht eine Frage der „Symbole“, ruft einfach an verschiedenen Funktionen an verschiedenen Adressen.

Wenn libB.so baut, setzt er seine Verbindungen zu libA.1.0.so. up Es weiß nicht, oder egal, was andere Anwendungen, die es benutzen werden tun, es ist nur weiß, wie man seine eigene Funktion Anrufe abzubilden.

Beim Erstellen der Anwendung selbst, die Anwendung Links zu libB.so. Was auch immer libB.so nennt, ist völlig unbekannt in der Anwendung. Die Anwendung wird auch Links statisch auf eine Bibliothek, die libB.so nicht darum schert.

Ein Gotcha: Wenn Liba statische Variablen verwendet, gibt es eine Reihe von Statik zugänglich sein libB.so, und eine andere, unabhängige Gruppe von Statik zugänglich für die Anwendung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top