Gid*_*eon 3 macports software-conflict libraries macos
最近,我尝试以一种 hacky 的方式安装一系列写得不好的软件(不会让你厌烦细节),但没有成功,现在看来我的 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
Run Code Online (Sandbox Code Playgroud)
然而,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)
Run Code Online (Sandbox Code Playgroud)
所以我认为我有一个旧版本(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
Run Code Online (Sandbox Code Playgroud)
而且我还是用旧版本:
$ /usr/bin/iconv --version
iconv (GNU libiconv 1.11)
Run Code Online (Sandbox Code Playgroud)
如果我只是尝试使用 MacPorts 卸载 iconv:
$ sudo port uninstall iconv
Run Code Online (Sandbox Code Playgroud)
没有消息,所以看起来它有效,但二进制文件仍然存在,并且我仍然收到相同的消息。但这与此相冲突:
$ sudo port upgrade iconv
Error: iconv is not installed
$ sudo port install iconv
Error: Port iconv not found
Run Code Online (Sandbox Code Playgroud)
我在 ~/.profile 中尝试了 DYLD_LIBRARY_PATH 和 DYLD_FALLBACK_LIBRARY_PATH 环境变量。无论哪种方式我都会遇到错误,现在它们已被注释掉。
也许这对于可能的解决方案来说已经足够了,但为了以防万一,我会在这里提供更多信息。
dyld:未找到符号:__cg_jpeg_resync_to_restart 引用自:/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/ImageIO 预期位于:/opt/local/lib/libJPEG.dylib 中/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/ImageIO 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)
Run Code Online (Sandbox Code Playgroud)
/usr/lib 上没有 libJPEG.dylib。
感谢您阅读本文!:)
请取消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手动安装东西。那是苹果的土地,你不应该修改它。无论如何,它只会在下一次操作系统更新时被覆盖。