Невозможно установить DYLD_FALLBACK_LIBRARY_PATH в оболочке на OSX 10.11.1


11

В сценариях оболочки, используемых для модульного тестирования с динамическими библиотеками в каталоге, отличном от типичного @rpath, ранее я мог установить DYLD_FALLBACK_LIBRARY_PATH, чтобы установить каталог, содержащий библиотеки. В 10.11.1 bash, похоже, игнорирует попытки установить эту переменную среды:

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

и DYLD_FALLBACK_LIBRARY_PATH не присутствует в выводе printenv.

Это связанный с безопасностью хак в оболочке 10.11? Я не смог найти это изменение, документированное на страницах руководства или в Интернете.



Конечно, install_name_tool - это постоянное решение (и я на самом деле написал его для настройки среды сборки). Для быстрого тестирования и отладки в среде разработки очень сложно создавать временные копии библиотек, взламывать изменения @rpath, а затем, возможно, забыть об изменениях вручную. DYLD_FALLBACK_LIBRARY_PATH и DYLD_LIBRARY_PATH были удобны для этих случайных циклов разработки / тестирования.
Парень

Ответы:


8

Это защита целостности системы, представленная в El Capitan.

Документация в этом от Apple

В основном, любые поставляемые Apple OS X исполняемые файлы защищены. и (из более раннего документа)

Порождение дочерних процессов процессов, ограниченных защитой целостности системы, таких как запуск вспомогательного процесса в пакете с помощью NSTask или вызов команды exec (2), сбрасывает специальные порты Mach этого дочернего процесса. Любые переменные среды динамического компоновщика (dyld), такие как DYLD_LIBRARY_PATH, удаляются при запуске защищенных процессов.

В этом случае ш защищен


Спасибо за указатель! Я сосредоточился на ядре и других средствах защиты файловой системы в SIP. Не заметил этого изменения.
Парень

2
Хорошо, это объясняет происхождение явления, но как, черт возьми, мы теперь должны тестировать неустановленные библиотеки? Я имею в виду, как мы можем писать make checkна El Capitan, когда нужны общие библиотеки?
аким

Большинство make через autoconf должно заканчиваться в / usr / local, который по-прежнему доступен для записи - если они попытаются найти что-нибудь еще в / usr, я бы поставил под сомнение знание автором OS X (или Unix)
user151019

Если кто-то найдет это после того, как потратит время, пытаясь понять, почему исчезли переменные среды dyld, рассмотрите возможность сообщения об ошибке в Apple, чтобы заставить их задокументировать взаимодействие dyld / SIP. Я уже сделал, и ошибка получила номер rdar: // 30755019. (Я надеюсь, что они тогда подумают, чтобы задокументировать другие подобные ловушки ...)
hmijail оплакивает отставку

1
(Я имел в виду документирование взаимодействия SIP на man-странице dyld, которая на момент написания статьи полностью
молчила
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.