Как установить LD_LIBRARY_PATH / DYLD_LIBRARY_PATH на макос - PullRequest
1 голос
/ 08 февраля 2020

На macos catalina '' 'echo $ VARIABLE' ''

Я вижу значение переменной, но java не может прочитать системную переменную. enter image description here

В linux проблем нет, поэтому я думаю, что это проблема zsh.

Java чтение всех переменных env, за исключением LD_LIBRARY_PATH и DYLD_LIBRARY_PATH

Ответы [ 2 ]

2 голосов
/ 08 февраля 2020

Переменные LD_LIBRARY_PATH / DYLD_LIBRARY_PATH не передаются в среду дочернего процесса в macOS, если включена защита целостности системы (SIP).

Для подтверждения:

#!/bin/zsh

cat << EOF > EnvDemo.java
public class EnvDemo {
   public static void main(String[] args) throws Exception {
      System.out.println(System.getenv("LD_LIBRARY_PATH"));
      System.out.println(System.getenv("DYLD_LIBRARY_PATH"));
      System.out.println(System.getenv("PATH"));
      System.out.println(System.getenv("CUSTOM_FLAG"));
   }
} 
EOF

javac EnvDemo.java
export LD_LIBRARY_PATH=/usr/local/library
export DYLD_LIBRARY_PATH=/usr/local/library
export CUSTOM_FLAG=custom_flag
java EnvDemo
# null
# null
# /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/oracle-19-5
# custom_flag

echo "env | grep LD_LIBRARY_PATH"
env | grep LD_LIBRARY_PATH
# No output here
echo "env | grep DYLD_LIBRARY_PATH"
env | grep DYLD_LIBRARY_PATH
# No output here
0 голосов
/ 08 февраля 2020

Я считаю, что любая заданная переменная env в процессе не обязательно копируется в какие-либо процессы, порожденные из него.

Итак, здесь у вашего zsh процесса явно есть переменная LD_LIBRARY_PATH env, но ваша java процесс не выполняется.

Если вы установите его так:

LD_LIBRARY_PATH=/Applications/blabla

, вы получите это поведение. Вы ищете:

export LD_LIBRARY_PATH=/Applications/blabla

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...