Установить предопределенный рабочий каталог при сборке программы в MacOSX - PullRequest
2 голосов
/ 21 марта 2019

Недавно я столкнулся с этой документацией об Apple и загрузке динамических библиотек.

Приводя:

Когда имя библиотеки является именем файла (то есть, когда оно не включает имена каталогов), динамический загрузчик ищет библиотеку в нескольких местах, пока не найдет ее, в следующем порядке:

  1. $ LD_LIBRARY_PATH
  2. $ DYLD_LIBRARY_PATH
  3. Рабочий каталог процесса
  4. $ DYLD_FALLBACK_LIBRARY_PATH

И меня беспокоит третий шаг «Рабочий каталог процесса».

Поскольку я загружаю библиотеки (и загружаемые библиотеки будут загружать другие), я бы хотел, чтобы в рабочем каталоге был какой-то предопределенный путь.

В начале main уже слишком поздно для меня.

Знаете ли вы, есть ли какая-то опция сборки, которую я могу установить в pkgbuild или в каком-нибудь файле .plist?

Знаете ли вы обходной путь для этого?

EDIT:

Я нашел эти клавиши , которые можно установить, в частности см. LSEnvironment. Я думал, может быть, какой-то "взломать", как

$DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:$DYLD_FALLBACK_LIBRARY_PATH

(да, я знаю, что это ужасно ...). Но это все равно не сработает, потому что цитируем предыдущую ссылку:

Эти переменные среды устанавливаются только для приложений, запускаемых через Launch Services. Если вы запускаете свой исполняемый файл непосредственно из командной строки, эти переменные среды не устанавливаются.

Итак, что я могу сделать, если кто-то вызывает мой исполняемый файл напрямую?

Рассматриваются ли вообще файлы .plist в случае непосредственного вызова исполняемого файла?

...