Como removo uma versão antiga do iconv da qual depende outro software? (e outros assuntos adoráveis) [OS X]

3

Recentemente, eu tentei, sem sucesso, instalar uma série de softwares mal-escritos de uma forma hacky (não vou te entediar com os detalhes) e agora parece que meus arquivos do sistema OS X (Lion, 10.7.5) estão uma bagunça. Vou tentar resumir isso.

Principais problemas:

1) Não conseguir abrir nenhum software do Terminal por causa das mensagens de erro do dyld

2) Tendo duas versões do libiconv instaladas, uma delas muito antiga e a outra incompleta, e lutando para resolver a situação

Primeiro exemplo de 1): executando algum software (instalado há muito tempo) que eu acho que requer o XCode e tal e é baseado em 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

No entanto, o otool revela que /opt/local/lib/libiconv.2.dylib é a versão 8.1.0. Acho que esta é a versão instalada pelo MacPorts.

Mas:

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

Portanto, acho que tenho uma versão antiga (7.0.0) para a qual o software que estou tentando executar se refere por engano. Estou hesitante em reinstalar o software porque um amigo guru que está agora do outro lado do mundo me ajudou com isso (ele não foi testado no OS X e eu acho que ele criou um binário e sabe o que mais.) Mas, em todo caso, recebo mensagens como essas por praticamente tudo que estou tentando executar na linha de comando, então não sei se é simplesmente um caso de reinstalar todo o meu software.

Aparentemente, eu preciso da mais nova versão do iconv, isso deve atualizar o libiconv? Então eu peguei o mais novo iconv (1.14) baixando e configurando - talvez ele irá sobrescrever a antiga versão libiconv 7.0.0? Mas não:

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

E eu ainda estou na versão antiga:

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

Se eu simplesmente tentar usar o MacPorts para desinstalar o iconv:

$ sudo port uninstall iconv

Não há mensagem, então parece que funcionou, mas o binário ainda está lá, e eu ainda recebo as mesmas mensagens. Mas isso entra em conflito com isso:

$ sudo port upgrade iconv
Error: iconv is not installed

$ sudo port install iconv
Error: Port iconv not found

Eu experimentei as variáveis de ambiente DYLD_LIBRARY_PATH e DYLD_FALLBACK_LIBRARY_PATH no meu ~ / .profile. Eu recebo erros de qualquer forma, agora eles são comentados.

Talvez isso seja informação suficiente para uma possível solução, mas darei mais algumas informações aqui, por precaução.

  • Atualizei meu MacPorts recentemente (auto atualização e atualização desatualizada).
  • A arquitetura do sistema é x86-64
  • Outra mensagem de erro quando tento abrir o Sublime Edit 2 na linha de comando:

dyld: Symbol not found: __cg_jpeg_resync_to_restart Referenced from: /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/ImageIO Expected in: /opt/local/lib/libJPEG.dylib in /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)

Não libJPEG.dylib em / usr / lib.

Obrigado por ler isto até agora! :)

    
por Gideon 01.04.2014 / 10:51

1 resposta

4

Por favor, desative qualquer DYLD_* variáveis que você definiu em seu ambiente. Eles estão causando pelo menos alguns dos problemas que você vê. Uma estrutura do sistema (como ImageIO.framework) não pode referenciar binários instalados pelo MacPorts, mas sua mensagem de erro mostra System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/ImageIO está carregando /opt/local/lib/libJPEG.dylib . Isso porque você provavelmente tem DYLD_LIBRARY_PATH set que substitui o caminho padrão do libjpeg do binário (que é /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib ).

Em seguida, garanta que /opt/local/lib/libiconv.2.dylib exista. Se isso não ocorrer, instale-o usando sudo port install libiconv . Se você quiser ter certeza de que não verá mais erros como este, execute sudo port rev-upgrade para verificar e corrigir automaticamente esses problemas.

Ah, e por favor, não instale o material em /usr/lib manualmente. Aquela é a terra da Apple, você nunca deve modificá-la. Só seria sobrescrito na próxima atualização do sistema operacional.

    
por 02.04.2014 / 18:58