Welche Version verwendet das System, wenn es mehrere Versionen einer Bibliothek gibt?

Welche Version verwendet das System, wenn es mehrere Versionen einer Bibliothek gibt?

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 LDFLAGSoder Befehlszeilenflags oder Konfigurationsdateieinstellungen; mutthat --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 von make) 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.soist normalerweise ein symbolischer Link zur gemeinsam genutzten Bibliotheksdatei, der die Version im Namen enthält.

Wenn Sie mittels verknüpfen -lxxx, wird diese libxxx.soDatei verwendet.

Wenn Sie eine Verknüpfung mit einer anderen Version herstellen möchten, müssen Sie den vollständigen Pfadnamen der Bibliothek angeben.

verwandte Informationen