Как удалить старую версию iconv, от которой зависит другое программное обеспечение? (и другие приятные проблемы) [OS X]

4577
Gideon

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

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

3

1 ответ на вопрос

4
neverpanic

Please unset any DYLD_* variables you have set in your environment. They are at least causing some of the problems you see. A system framework (such as ImageIO.framework) cannot reference binaries installed by MacPorts, but your error message shows System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/ImageIO is loading /opt/local/lib/libJPEG.dylib. That's because you likely have DYLD_LIBRARY_PATH set which overrides the default libjpeg path from the binary (which is /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib).

Then, ensure that /opt/local/lib/libiconv.2.dylib exists. If it does not, please install it using sudo port install libiconv. If you want to make sure you're not going to see more errors like this, run sudo port rev-upgrade to automatically check for and fix such problems.

Oh, and please don't install stuff into /usr/lib manually. That's Apple-land, you should never modify it. It would only be overwritten on the next OS update anyway.

Молоток на гвоздь. Никогда бы не подумал, что это будет так просто, как набрать "unset DYLD_LIBRARY_PATH". Я не понимал, что раскомментирование в .profile не будет иметь такого же эффекта. Кстати, файл .dylib существует, и rev-upgrade больше ничего не раскрыл. Первая программа по-прежнему выдает предупреждения, но открывается через некоторое время. Но, как я уже сказал, он не разрабатывался и не тестировался на OS X (хотя у меня раньше не было таких предупреждений). Большое спасибо, и, кстати, я люблю ваше имя пользователя! Gideon 10 лет назад 1
Хотя это не было связано с вопросом выше, ошибка, которую я получал, была такой же. Google высадил меня здесь и решил. Я экспортировал его в файл `~ / .zshrc` как` export DYLD_LIBRARY_PATH = / usr / local / lib`, что приводило к ошибке при использовании двоичного файла `subl` для SublimeText3. Комментируя это, как предложил @neverpanic, добился цели. Autodidact 7 лет назад 0