Conflitto libpng.16.16.dylib

1

Nel mio mac book (OS X 10.12.4) ho due libpng.16.16.dylib : uno in /opt/X11/bin , per cui otool riporta

/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)

e un altro in Users/me/anaconda/lib con l'installazione python di anaconda, per i quali otool riporta

/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)

Nel mio script di avvio, ho impostato DYLD_LIBRARY_PATH per includere /opt/X11/lib .

Ora, quando voglio import matplotlib da ipython3 (della distribuzione anaconda), ottengo un errore

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

Quindi sembra che dlopen cerchi /opt/X11/lib/libpng.16.16.dylib piuttosto che quello sotto anaconda .

C'è un modo per evitarlo senza cambiare DYLD_LIBRARY_PATH ? Non riesco a ricordare perché ho impostato DYLD_LIBRARY_PATH come questo, ma quale sarebbe l'effetto di omettere /opt/X11/lib da esso?

    
posta Walter 20.05.2017 - 18:23
fonte

1 risposta

2

Posso pensare ad alcuni modi.

  • Esegui il backup del /opt/X11/lib/libpng.16.16.dylib . E sostituire il file con un link simbolico al file in anaconda o incollare direttamente il file.
  • Penso che le variabili di ambiente possano avere più percorsi, come la variabile $ PATH. Ho scoperto che il percorso che hai davanti ha la precedenza su quelli che sono scritti dietro di esso. Ad esempio, se il tuo percorso è /usr1/:/usr2/ allora dovrebbe prima controllare la directory usr1 e vedere se il file richiesto esiste, prima di passare alla seconda. Quindi potresti mettere il tuo percorso anaconda di fronte a /opt/X11/lib/libpng.16.16.dylib .
  • Credo che il collegamento simbolico al file sia il modo migliore. Ho sperimentato questo genere di cose prima, ho solo dovuto aggiungere un link simbolico ed è stato risolto.

Questa risposta potrebbe spiegare la tua ultima domanda.

    
risposta data 22.05.2017 - 06:40
fonte

Leggi altre domande sui tag