16 votes

Impossible de définir DYLD_FALLBACK_LIBRARY_PATH dans le shell sur OSX 10.11.1

Dans les scripts shell utilisés pour les tests unitaires avec des bibliothèques dynamiques dans un répertoire autre que le @rpath typique, j'ai précédemment pu définir DYLD_FALLBACK_LIBRARY_PATH pour définir le répertoire contenant les bibliothèques. Sous 10.11.1, bash semble ignorer les tentatives de définir cette variable d'environnement :

$ sh -x testscript.sh
+ DYLD_FALLBACK_LIBRARY_PATH=/Users/something/testinglibs
+ export DYLD_FALLBACK_LIBRARY_PATH
+ exec printenv

et DYLD_FALLBACK_LIBRARY_PATH n'est pas présent dans la sortie de printenv.

S'agit-il d'un hack lié à la sécurité dans le shell de 10.11 ? Je n'ai pas pu trouver ce changement documenté dans les pages de manuel ou en ligne.

0 votes

Est-ce que le outil install_name_tool pourrait aider ?

2 votes

Bien sûr, install_name_tool est une solution permanente (et je l'ai effectivement scriptée pour configurer l'environnement de construction). Pour des tests rapides et du débogage dans un environnement de développement, c'est une corvée de devoir faire des copies temporaires de bibliothèques, de pirater des changements @rpath, et ensuite peut-être oublier le changement manuel. DYLD_FALLBACK_LIBRARY_PATH et DYLD_LIBRARY_PATH étaient pratiques pour ces cycles de développement/test occasionnels.

12voto

yoliho Points 340

Ceci est System Integrity Protection introduit dans El Capitan

La documentation se trouve dans ce lien d'Apple

Essentiellement, tous les exécutables OS X fournis par Apple sont protégés. et (d'après un document antérieur)

Créer des processus enfants de processus restreints par la Protection de l'Intégrité du Système, comme en lançant un processus auxiliaire dans un bundle avec NSTask ou en appelant la commande exec(2), réinitialise les ports spéciaux Mach de ce processus enfant. Toutes les variables d'environnement du chargeur dynamique (dyld), telles que DYLD_LIBRARY_PATH, sont effacées lors du lancement de processus protégés.

Dans ce cas, sh est protégé

0 votes

Merci pour le conseil! J'étais concentré sur le noyau et d'autres protections du système de fichiers dans SIP. Je n'avais pas remarqué ce changement.

3 votes

D'accord, cela explique l'origine du phénomène, mais comment diable sommes-nous maintenant censés tester des bibliothèques non installées? Je veux dire, comment pouvons-nous écrire make check sur El Capitan lorsque des bibliothèques partagées sont nécessaires?

0 votes

La plupart des installations effectuées via autoconf devraient aboutir dans /usr/local qui est toujours modifiable - s'ils essaient de s'installer ailleurs sous /usr, je remettrais en question les connaissances de l'auteur en matière de OS X (ou Unix)

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X