2012-08-14 1 views
14

Für jeden Git-Befehl, den ich ausführen möchte, erhalte ich diese Nachricht. Beispiel:Loswerden von "git: /usr/local/lib/libz.so.1: keine Versionsinformationen verfügbar (erforderlich durch git)"

stewie:~# git --version 
git: /usr/local/lib/libz.so.1: no version information available (required by git) 
git version 1.7.11.4 

Wie kann ich das loswerden?


Edit 1:

Versuch zlib1g zu aktualisieren:

stewie:/tmp# apt-get install zlib1g 
Reading package lists... Done 
Building dependency tree 
Reading state information... Done 
zlib1g is already the newest version. 
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 

Edit 2:

Ich bin auf Debian Lenny (5), also, leider, usin g apt-get ist nicht so einfach.

+0

Warum haben Sie eine libz in/usr/local? Ist es vielleicht ein veraltetes Relikt, das Sie sicher entfernen können? –

+0

Hm. Leider weiß ich nicht viel über Linux. Libs auf '/ usr/local' haben eine bestimmte Bedeutung? Es ist immer ein "Relikt", wenn es dort sitzt? – dmmd

+1

Nun/usr/local bedeutet, dass es lokal kompiliert wurde, nicht von der Betriebssystemverteilung geliefert. Manchmal tun Leute das, weil sie eine neuere Version benötigen als das, was mit der Distribution kam, dann wird die Distribution auf etwas Neueres aktualisiert und das in/usr/local wird vergessen. Das war nur eine Vermutung. Wenn Sie zlib nicht selbst kompiliert haben, hat jemand anderes mit Root-Zugriff auf die Maschine das getan. Fragen Sie sie, warum ... und versuchen Sie vielleicht, LD_LIBRARY_PATH =/usr/lib git --version zu überschreiben, bis Sie eine Antwort erhalten. –

Antwort

17

/usr/local ist für die Installation von lokal vom Administrator des Computers kompilierten Programmen gedacht. Einfache Programme gehen einfach in/usr/local/bin und werden von dort aus ausgeführt, indem/usr/local/bin in die Umgebungsvariable PATH gesetzt wird. Dadurch kann der Administrator den Benutzern Zugriff auf zusätzliche Befehle geben, die nicht im Betriebssystem enthalten sind. Es gibt nichts, was root daran hindert, neue Dinge in/usr/bin zu installieren, aber die Konvention ist, dass/usr/bin von den Packaging-Tools des OS-Distributors verwaltet wird, und das Trennen von lokalem Material macht die Dinge etwas weniger verwirrend.

Manchmal benötigt ein lokales Programm eine Bibliothek, die nicht vom Betriebssystem-Distributor bereitgestellt wird, und die Bibliothek geht in/usr/local/lib und alles funktioniert.

Wenn es einen Versionskonflikt gibt - das Betriebssystem libz.so der Version X, aber ein lokales Programm benötigt libz.so Version X + 1 oder benötigt libz.so mit einer speziellen Option kompiliert werden - Dinge werden kompliziert. Die Installation der neueren Bibliothek in/usr/local/lib ist wahrscheinlich zunächst in Ordnung.

Jedes Programm sucht nach Bibliotheken, die auf /etc/ld.so.conf basieren, und wenn/usr/lib dort Priorität erhält, finden die/usr/local-Programme nicht die neuere Bibliothek, die sie benötigen. So erhält/usr/local/lib normalerweise Priorität. Ältere Programme, die eine neuere Bibliothek finden, stellen normalerweise kein Problem dar, da die Bibliotheken abwärtskompatibel sind.

Jahre später, nach ein paar OS-Upgrades, ist die Bibliothek in/usr/lib jetzt Version X + 2 und die in/usr/local/lib ist immer noch Version X + 1, und jetzt Programme von/usr/bin lädt die alte/usr/local/lib-Version und benimmt sich schlecht. Dies kann möglicherweise durch Entfernen der alten Bibliothek behoben werden. Das Programm/usr/local/bin, das die Version X + 1 benötigt, findet die Version X + 2 in/usr/lib und funktioniert gut. Aber nur, wenn die Notwendigkeit einer neueren Version der Grund für die lokale Installation von Version X + 1 war.

Um nach möglichen Problemen zu suchen, bevor Sie das Entfernen durchführen, suchen Sie nach etwas unter/usr/local, das libz verwendet.

ldd /usr/local/bin/* /usr/local/sbin/* | less +/libz 

Wenn Sie etwas finden, die Referenzen libz versuchen, es mit LD_LIBRARY_PATH=/usr/lib laufen, um sicherzustellen, es funktioniert immer noch.Unter der Annahme, nichts bricht, entfernen Sie die lokalen libz Dateien (indem sie auf einen Backup-Speicherort zu bewegen, so dass Sie dies rückgängig machen können, wenn Sie müssen)

mkdir /root/local-libz-backup 
mv /usr/local/lib/libz* /root/local-libz-backup 
ldconfig 
+0

Super Antwort. php vertraut auch auf libz.so.1, also werde ich dieses Update verschieben. Aber klar ist das der richtige Weg. Vielen Dank – dmmd

0

Sieht so aus, als müssten Sie Ihre Build-Voraussetzungen aktualisieren.

+0

Und wie/warum soll ich genau fortfahren? – dmmd

+0

Google für den Bau Git. Dort finden Sie eine Reihe von 'sudo apt-get install'-Parametern. Ein einfacher Weg ist es, libz zu deinstallieren und es zu entfernen. Dann installiere es neu. –

+0

Ich habe gerade git kompiliert/installiert. Es ist ein verdammter Debian Lenny (5) Server, daher werden die Repositories nicht mehr gepflegt. Ich muss einige Backport oder andere Workarounds einrichten, um Pakete herunterzuladen. Ich musste 'make install' bereits mit 'CFLAGS =" - liconv "' ausführen, da 'iconv' nicht gefunden wurde. Und ich habe meine Antwort aktualisiert, um meine Ausgabe 'apt-get install zlib1g' anzuzeigen. – dmmd

1

Ich habe Direct auf meinem Server und diese this guide mein Problem gelöst.

(ab Seite kopiert)

Wenn Sie den Fehler sehen

/usr/local/lib/libz.so.1: no version information available (required by python) 

es mit der Version von libz installiert zu tun hat. Der Grund für die aktuelle Version liegt in der Version von libz, die libxml2 benötigt. Eine neuere Version von beiden wird das Problem beheben, aber aufgrund vieler gemeldeter Probleme mit diesem Update sind wir zu der älteren Version von libz und libxml2 zurückgekehrt. Beachten Sie, dass die Warnung nichts verletzt, sodass sie ignoriert werden kann.

Wenn Sie noch libz und libxml2 zu ihren neueren Versionen aktualisieren, um die Nachricht, Art zu vermeiden:

cd /usr/local/directadmin/custombuild 
./build update 
perl -pi -e 's/zlib:1.2.3:.*/zlib:1.2.5:/' versions.txt 
perl -pi -e 's/libxml2:2.7.6:.*/libxml2:2.7.8:/' versions.txt 
./build update_data 
./build zlib 
./build libxml2 
./build php n 
-1

Export LD_LIBRARY_PATH mit dem git lib Pfad zur Lösung des Fehlers:

libz.so.1: no version information available 
0

Diese Methode funktioniert für meinen Fall, fügen Sie die folgende Zeile Ihre .bash_profile:

LD_LIBRARY_PATH=/lib64:$LD_LIBRARY_PATH

dann . ~/.bash_profile

Verwandte Themen