如何在 Mac 上设置 LD_LIBRARY_PATH/DYLD_LIBRARY_PATH

mco*_*lak 6 java macos zsh environment-variables

在 Macos Catalina 上 '''echo $VARIABLE'''

我看到了变量的值,但 java 无法读取系统变量。 在此输入图像描述

在linux中没有问题,所以我认为这是一个zsh问题。

Java读取所有变量env,除了LD_LIBRARY_PATHDYLD_LIBRARY_PATH

Phi*_*ppe 9

如果启用了系统完整性保护 (SIP),则变量 LD_LIBRARY_PATH / DYLD_LIBRARY_PATH 不会传递到 macOS 上子进程的环境。

确认 :

#!/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
Run Code Online (Sandbox Code Playgroud)


rzw*_*oot 0

我相信进程中的任何给定环境变量不一定会复制到从中生成的任何进程。

所以,在这里,你的 zsh 进程显然有LD_LIBRARY_PATHenv 变量,但你的 java 进程没有。

如果你这样设置:

LD_LIBRARY_PATH=/Applications/blabla

你会得到这种行为。您正在寻找:

export LD_LIBRARY_PATH=/Applications/blabla