Il existe un conflit de liaison dynamique entre les différentes bibliothèques dynamiques libjpeg sous OSX. Il y a d'abord une libJPEG.dylib native standard (dans /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/). Mais si vous utilisez MacPorts, vous pouvez également avoir une libjpeg.dylib liée au port (dans /opt/local/lib). Cette dernière peut par exemple avoir été installée comme une dépendance pour un autre port.
Cela crée un problème lorsque vous liez votre système à libJPEG (ce qui est préférable). Alors si /opt/local/lib
se trouve dans DYLD_LIBRARY_PATH, ce chemin sera prioritaire lors de la recherche d'une librairie dynamique, ce qui entraînera une erreur d'exécution lors du chargement des symboles :
dyld: Symbol not found: __cg_jpeg_resync_to_restart
Referenced from:
/System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
Expected in: /opt/local/lib/libJPEG.dylib
in /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
Trace/BPT trap: 5
J'ai donc deux questions (probablement liées) :
-
Quelle est la bonne façon de résoudre le problème actuel (suppression de l'eau de mer) ?
/opt/local/lib
deDYLD_LIBRARY_PATH
résout évidemment le problème mais crée des problèmes pour les autres dépendances) ? -
Quels autres chemins sont recherchés pour les librairies dynamiques (c'est-à-dire où le chemin "/System/Library" est spécifié) et pourquoi DYLD_LIBRARY_PATH est-il plus prioritaire ?