如何删除其他软件所依赖的旧版本的 iconv?(以及其他可爱的问题)

如何删除其他软件所依赖的旧版本的 iconv?(以及其他可爱的问题)

最近,我尝试以黑客方式安装一系列编写糟糕的软件,但没有成功(我不会用细节来烦你),现在看来我的 OS X(Lion,10.7.5)系统文件一团糟。我会尽量简短地说。

主要问题:

1) 由于 dyld 错误消息,无法从终端打开任何软件

2)安装了两个版本的 libiconv,其中一个版本太旧,另一个版本不完整,很难解决这个问题

1 的第一个例子:运行一些软件(很久以前安装的),我认为它需要 XCode 之类的东西,并且基于 Python,其结果如下:

...
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 显示 /opt/local/lib/libiconv.2.dylib 是版本 8.1.0。我认为这是 MacPorts 安装的版本。

但:

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

所以我认为我有一个旧版本 (7.0.0),我试图运行的软件错误地引用了它。我犹豫着是否要重新安装该软件,因为现在在世界另一端的一位专家朋友帮助了我(它没有在 OS X 上测试过,我认为他创建了一个二进制文件,谁知道还有什么。)但无论如何,我尝试从命令行运行的几乎所有东西都会收到这样的消息,所以我不知道这是否只是必须重新安装我的所有软件的情况。

显然我需要获取 iconv 的最新版本,这应该会更新 libiconv?所以我通过下载和配置获得了最新的 iconv (1.14) - 也许它会覆盖旧的 7.0.0 libiconv 版本?但没有:

$ ./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

我仍然在使用旧版本:

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

如果我只是尝试使用 MacPorts 来卸载 iconv:

$ sudo port uninstall iconv

没有消息,所以看起来它起作用了,但是二进制文件仍然存在,我仍然收到相同的消息。但这与此相冲突:

$ sudo port upgrade iconv
Error: iconv is not installed

$ sudo port install iconv
Error: Port iconv not found

我已经尝试了 ~/.profile 中的 DYLD_LIBRARY_PATH 和 DYLD_FALLBACK_LIBRARY_PATH 环境变量。无论哪种方式,我都会收到错误,现在它们已被注释掉。

也许这些信息对于可能的解决方案来说已经足够了,但为了以防万一,我会在这里提供更多信息。

  • 我最近刚刚更新了我的 MacPorts(自我更新和升级已过时)。
  • 系统架构为x86-64
  • 当我尝试从命令行打开 Sublime Edit 2 时出现另一条错误消息:

dyld:未找到符号:__cg_jpeg_resync_to_restart 引用自:/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/ImageIO 预期位于:/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/ImageIO 中的 /opt/local/lib/libJPEG.dylib Trace/BPT 陷阱: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)

/usr/lib 上没有 libJPEG.dylib。

感谢您读到这里!:)

答案1

请取消设置DYLD_*您在环境中设置的任何变量。它们至少会导致您看到的一些问题。系统框架(例如 ImageIO.framework)无法引用 MacPorts 安装的二进制文件,但您的错误消息显示System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/ImageIO正在加载/opt/local/lib/libJPEG.dylib。这是因为您可能已DYLD_LIBRARY_PATH设置覆盖二进制文件中默认 libjpeg 路径(即/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib)的 。

然后,确保/opt/local/lib/libiconv.2.dylib存在。如果不存在,请使用安装sudo port install libiconv。如果您想确保不会再看到类似错误,请运行sudo port rev-upgrade以自动检查并修复此类问题。

哦,请不要/usr/lib手动安装东西。那是苹果的世界,你永远不应该修改它。无论如何,它只会在下一次操作系统更新时被覆盖。

相关内容