1 votos

Conflicto con libpng.16.16.dylib

En mi mac book (OS X 10.12.4) tengo dos libpng.16.16.dylib : uno en /opt/X11/bin para lo cual otool informa

/opt/X11/lib/libpng16.16.dylib:
    /opt/X11/lib/libpng16.16.dylib (compatibility version 43.0.0, current version 43.0.0)
    /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)

y otro en Users/me/anaconda/lib con la instalación de Python de anaconda, para lo cual otool informa

/Users/me/anaconda/lib/libpng16.16.dylib:
    @rpath/libpng16.16.dylib (compatibility version 44.0.0, current version 44.0.0)
    /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)

En mi script, establezco DYLD_LIBRARY_PATH para incluir /opt/X11/lib .

Ahora, cuando quiero import matplotlib de ipython3 (de la distribución anaconda), obtengo un error

ImportError: dlopen(/Users/walter1/anaconda/lib/python3.6/site-packages/matplotlib/_png.cpython-36m-darwin.so, 2): Library not loaded: @rpath/libpng16.16.dylib
  Referenced from: /Users/walter1/anaconda/lib/python3.6/site-packages/matplotlib/_png.cpython-36m-darwin.so
  Reason: Incompatible library version: _png.cpython-36m-darwin.so requires version 44.0.0 or later, but libpng16.16.dylib provides version 43.0.0

Así que parece que dlopen intenta /opt/X11/lib/libpng.16.16.dylib en lugar de la de anaconda .

¿Hay alguna manera de evitar esto sin cambiar DYLD_LIBRARY_PATH ? No recuerdo por qué puse DYLD_LIBRARY_PATH así, pero ¿cuál sería el efecto de omitir /opt/X11/lib de ella?

1voto

Zack Titan Puntos 133

Se me ocurren algunas formas.

  • Haz una copia de seguridad de tu /opt/X11/lib/libpng.16.16.dylib . Y reemplaza el archivo con un enlace simbólico al archivo bajo anaconda o pega directamente el archivo.
  • Creo que las variables de entorno pueden tener múltiples rutas, como la variable $PATH. Encontré que la ruta que tienes delante tiene la precedencia sobre las que están escritas detrás de ella. Por ejemplo, si tu ruta es /usr1/:/usr2/ entonces debería comprobar el usr1 y ver si el archivo requerido existe, antes de pasar al segundo. Así que posiblemente podría poner su ruta de anaconda delante del /opt/X11/lib/libpng.16.16.dylib .
  • Creo que el enlace simbólico del archivo es la mejor manera. Ya he experimentado ese tipo de cosas antes, sólo tuve que añadir un enlace simbólico y se arregló.

Este La respuesta podría explicar su última pregunta.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X