Ich habe eine ausführbare Binärdatei mit dem Namen "alpha", für die eine verknüpfte Bibliothek (libz.so.1.2.7) erforderlich ist, die unter abgelegt wird /home/username/myproduct/lib/libz.so.1.2.7
Ich exportiere dasselbe in meine Terminal-Instanz, bevor ich meine ausführbare Binärdatei durch Ausführen des folgenden Befehls spawne.
export LD_LIBRARY_PATH=/home/username/myproduct/lib/:$LD_LIBRARY_PATH
Wenn ich nun eine andere Anwendung "bravo" spawne, die dieselbe Bibliothek, aber eine andere Version benötigt, dh (libz.so.1.2.8), die in verfügbar ist
/lib/x86_64-linux-gnu/libz.so.1.2.8
, gibt das System den folgenden Fehler aus.
version `ZLIB_1.2.3.3' not found (required by /usr/lib/x86_64-linux-gnu/libxml2.so.2)
Wenn ich das deaktiviere LD_LIBRARY_PATH
, läuft "bravo" gut an. Ich verstehe, dass das obige Verhalten darauf zurückzuführen ist, dass es LD_LIBRARY_PATH
Vorrang vor den in definierten Verzeichnispfaden hat, /etc/ld.so.conf
während nach verknüpften Bibliotheken gesucht wird. Infolgedessen ist der obige Fehler aufgetreten. Ich bin nur neugierig, warum die Entwickler von UNIX / LINUX das Betriebssystem nicht für die Suche nach verknüpften Bibliotheken in anderen Verzeichnissen gemäß der Hierarchie entworfen haben, wenn die erste Instanz der Bibliothek eine andere Version hat.
Vereinfacht gesagt durchlaufen UNIX / LINUX-Systeme eine Reihe von Verzeichnissen, bis die erforderliche Bibliothek gefunden wurde. Aber warum macht es nicht dasselbe, bis es die erwartete Version findet, anstatt die erste Instanz der Bibliothek unabhängig von ihrer Version zu akzeptieren?
libz.so.1
ist ein Symlink zulibz.so.1.2.8