3

Недавно я безуспешно пытался установить серию плохо написанных программ хакерским способом (не надоедать вам подробностями), и теперь мне кажется, что мои системные файлы 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

Я экспериментировал с переменными окружения DYLD_LIBRARY_PATH и DYLD_FALLBACK_LIBRARY_PATH в моем ~/.profile. В любом случае я получаю ошибки, сейчас они закомментированы.

Возможно, этой информации будет достаточно для возможного решения, но я дам здесь дополнительную информацию на всякий случай.

  • Я обновил свой 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 Ожидается в: /opt/libJlib.lib.lib /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)

Нет libJPEG.dylib в /usr /lib.

Спасибо за чтение этого далеко! :)

1 ответ1

4

Удалите все переменные 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 вручную. Это Apple-Land, вы никогда не должны изменять его. В любом случае, оно будет перезаписано только при следующем обновлении ОС.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .