17 votes

Conflit entre la priorité de liaison dynamique dans OSX ?

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

  1. Quelle est la bonne façon de résoudre le problème actuel (suppression de l'eau de mer) ? /opt/local/lib de DYLD_LIBRARY_PATH résout évidemment le problème mais crée des problèmes pour les autres dépendances) ?

  2. 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 ?

0voto

Chris Wessells Points 31

J'ai suivi les instructions que mdemirst a suggérées et cela a réglé mon problème. J'utilise OS X Sierra.

J'ai créé un gist au cas où quelqu'un d'autre rencontrerait le même problème.

Gist pour corriger les erreurs de Spidermonkey

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X