Wie entferne ich eine alte Version von iconv, von der andere Software abhängt? (und andere schöne Ausgaben) [OS X]

4677
Gideon

Vor kurzem habe ich erfolglos versucht, eine Serie schlecht geschriebener Software auf hackige Weise zu installieren (wird Sie nicht mit den Details langweilen), und jetzt scheinen meine Systemdateien von OS X (Lion, 10.7.5) ein Durcheinander zu sein. Ich werde versuchen, es kurz zu halten.

Hauptprobleme:

1) Aufgrund von Fehlermeldungen von dyld kann keine Software vom Terminal aus geöffnet werden

2) Nachdem zwei Versionen von libiconv installiert wurden, eine davon zu alt und die andere unvollständig, und es schwierig, die Situation zu lösen

Erstes Beispiel von 1): Ausführen von Software (vor langer Zeit installiert), die, wie ich denke, XCode erfordert, und solche, die auf Python basieren:

... ImportError: dlopen(/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/glib/_glib.so, 2): Library not loaded: /opt/local/lib/libiconv.2.dylib Referenced from: /opt/local/lib/libgobject-2.0.0.dylib Reason: Incompatible library version: libgobject-2.0.0.dylib requires version 8.0.0 or later, but libiconv.2.dylib provides version 7.0.0 

Otool zeigt jedoch, dass /opt/local/lib/libiconv.2.dylib Version 8.1.0 ist. Ich denke, das ist die von MacPorts installierte Version.

Aber:

$ otool -L /usr/lib/libiconv.2.dylib /usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0) 

Ich glaube also, ich habe eine alte Version (7.0.0), auf die sich die Software, die ich ausführen möchte, irrtümlich bezieht. Ich zögere, die Software erneut zu installieren, weil ein Guru-Freund, der sich jetzt auf der anderen Seite der Welt befindet, mir dabei geholfen hat (er wurde nicht unter OS X getestet und ich denke, er hat eine Binärdatei erstellt und weiß, was sonst noch.) Auf jeden Fall bekomme ich solche Meldungen für so ziemlich alles, was ich versuche, von der Kommandozeile aus zu laufen, also weiß ich nicht, ob es einfach darum geht, meine gesamte Software neu zu installieren.

Anscheinend muss ich die neueste Version von iconv herunterladen, sollte dies libiconv aktualisieren? Also habe ich das neueste iconv (1.14) durch Herunterladen und Konfigurieren erhalten - vielleicht wird es die alte Version 7.0.0 libiconv überschreiben? Aber nein:

$ ./configure --prefix=/usr/lib ... dyld: Library not loaded: /opt/local/lib/libiconv.2.dylib Referenced from: /opt/local/lib/libintl.8.dylib Reason: Incompatible library version: libintl.8.dylib requires version 8.0.0 or later, but libiconv.2.dylib provides version 7.0.0 

Und ich bin immer noch auf der alten Version:

$ /usr/bin/iconv --version iconv (GNU libiconv 1.11) 

Wenn ich einfach versuche, iconV mit MacPorts zu deinstallieren:

$ sudo port uninstall iconv 

Es gibt keine Nachricht, so dass es funktioniert hat, aber die Binärdatei ist immer noch da und ich bekomme immer noch die gleichen Nachrichten. Aber das widerspricht dem:

$ sudo port upgrade iconv Error: iconv is not installed  $ sudo port install iconv Error: Port iconv not found 

Ich habe mit den Umgebungsvariablen DYLD_LIBRARY_PATH und DYLD_FALLBACK_LIBRARY_PATH in meinem ~ / .profile experimentiert. Ich bekomme Fehler in beiden Fällen, jetzt werden sie auskommentiert.

Vielleicht wäre das genug Information für eine mögliche Lösung, aber ich werde hier für alle Fälle ein paar weitere Informationen geben.

  • Ich habe meine MacPorts kürzlich aktualisiert (Selbstaktualisierung und Aktualisierung veraltet).
  • Die Systemarchitektur ist x86-64
  • Eine weitere Fehlermeldung, wenn ich versuche, Sublime Edit 2 über die Befehlszeile zu öffnen:

dyld: Symbol nicht gefunden: __cg_jpeg_resync_to_restart Referenziert von: /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/ImageIO Erwartet in: /opt/local/libJlbbbbwlbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcbcgbggggg /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/ImageIO Trace / BPT-Trap: 5

$ otool -L /opt/local/lib/libJPEG.dylib /opt/local/lib/libJPEG.dylib: /opt/local/lib/libjpeg.9.dylib (compatibility version 11.0.0, current version 11.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)  $ otool -L /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/ImageIO | grep "libJPEG*" /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib (compatibility version 1.0.0, current version 1.0.0) 

Keine libJPEG.dylib auf / usr / lib.

Danke fürs Lesen bis hierher! :)

3

1 Antwort auf die Frage

4
neverpanic

Deaktivieren Sie alle DYLD_*Variablen, die Sie in Ihrer Umgebung festgelegt haben. Sie verursachen zumindest einige der Probleme, die Sie sehen. Ein Systemframework (wie ImageIO.framework) kann nicht auf von MacPorts installierte Binärdateien verweisen, aber die Fehlermeldung zeigt, dass geladen System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/ImageIOwird /opt/local/lib/libJPEG.dylib. Das liegt daran, dass Sie wahrscheinlich festgelegt haben DYLD_LIBRARY_PATH, welcher den Standardpfad libjpeg von der Binärdatei überschreibt (was ist /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib).

Dann stellen Sie sicher, dass es /opt/local/lib/libiconv.2.dylibexistiert. Wenn nicht, installieren Sie es bitte mit sudo port install libiconv. Wenn Sie sicherstellen möchten, dass keine weiteren Fehler angezeigt werden, führen Sie diese aus, um sudo port rev-upgradeautomatisch nach solchen Problemen zu suchen und diese zu beheben.

Oh, und bitte installiere keine Sachen /usr/libmanuell. Das ist Apple-Land, Sie sollten es niemals ändern. Es würde ohnehin nur beim nächsten OS-Update überschrieben.

Hammer auf den Nagel. Ich hätte nie gedacht, dass es so einfach wäre, als "unset DYLD_LIBRARY_PATH" einzugeben. Mir war nicht klar, dass das Entfernen eines Kommentares in .profile nicht denselben Effekt haben würde. Übrigens existiert die .dylib-Datei und Rev-Upgrade hat nichts anderes enthüllt. Das erste Programm gibt immer noch Warnungen aus, öffnet sich jedoch nach einiger Zeit. Aber wie gesagt, es wurde nicht für OS X entwickelt oder getestet (obwohl ich diese Warnungen noch nicht hatte). Vielen Dank und übrigens, ich liebe deinen Benutzernamen! Gideon vor 10 Jahren 1
Obwohl ich mich nicht auf die obige Frage bezogen habe, war der Fehler derselbe. Google hat mich hier gelandet und es gelöst. Ich hatte es in meine `~ / .zshrc`-Datei als` export DYLD_LIBRARY_PATH = / usr / local / lib 'exportiert, was mir bei der Verwendung von `subl` binary für SublimeText3 den Fehler auslöste. Das Kommentieren als @neverpanic vorgeschlagen schlug den Trick vor. Autodidact vor 8 Jahren 0