![Welche Version verwendet das System, wenn es mehrere Versionen einer Bibliothek gibt?](https://rvso.com/image/134431/Welche%20Version%20verwendet%20das%20System%2C%20wenn%20es%20mehrere%20Versionen%20einer%20Bibliothek%20gibt%3F.png)
Nehmen wir an, wir haben bereits eine Freetype-Bibliothek in /usr/lib64/libfreetype.so installiert, deren Version 1.4 ist, und es gibt eine andere Version dieser Bibliothek, die wir kompiliert und in /usr/local/lib/libfreetype.so installiert haben. Woher weiß das Build-System (make), welche Version verwendet werden soll, wenn wir eine Software erstellen, die Freetype erfordert?
Antwort1
TL;DR-Version: es kommt darauf an.
- Betriebssystem: Möglicherweise gibt es eine betriebssystemspezifische Umgebungskonfigurationsdatei (
LD_LIBRARY_PATH
) oder einen Befehl (z. B.ldconfig(8)
), der die für die Suche nach Bibliotheken verwendeten Pfade registriert. - Build-System: Es kann seinUmgebungsvariablenwie
LDFLAGS
oder Befehlszeilenflags oder Konfigurationsdateieinstellungen;mutt
hat--with-curses=[dir]
für den Fall, dass das System (oder der Benutzer) ncurses unter einem benutzerdefinierten Pfad hat. Diese hängen vom Build-System (oder sogar der Variante vonmake
) ab und müssen möglicherweise manuell in die Autoconf- oder CMake-Dateien geschrieben werden. - Konfiguration nach dem Build: Tools wie
patchelf
(sofern verfügbar) ermöglichen die Auswahl verschiedener Bibliotheken oder die Änderung des Suchpfads.
Antwort2
libxxx.so
ist normalerweise ein symbolischer Link zur gemeinsam genutzten Bibliotheksdatei, der die Version im Namen enthält.
Wenn Sie mittels verknüpfen -lxxx
, wird diese libxxx.so
Datei verwendet.
Wenn Sie eine Verknüpfung mit einer anderen Version herstellen möchten, müssen Sie den vollständigen Pfadnamen der Bibliothek angeben.