【问题标题】:How to set LD_LIBRARY_PATH/DYLD_LIBRARY_PATH on macos如何在macos上设置LD_LIBRARY_PATH/DYLD_LIBRARY_PATH
【发布时间】:2020-05-24 08:10:19
【问题描述】:

在 macos catalina 上 '''回显 $VARIABLE'''

我看到了变量的值,但 java 无法读取系统变量。

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

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

【问题讨论】:

    标签: java macos environment-variables zsh


    【解决方案1】:

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

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

    如果你这样设置:

    LD_LIBRARY_PATH=/Applications/blabla

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

    export LD_LIBRARY_PATH=/Applications/blabla

    【讨论】:

    • 问题仅出现在名称 LD_LIBRARY_PATH 和 DYLD_LIBRARY_PATH。我尝试使用其他名称所有其他变量都没有问题
    • 检查您的java 可执行文件(运行which java)。它可能是一个在运行真正的java 之前设置LD_LIBRARY_PATH 的shell 脚本。
    【解决方案2】:

    如果启用了系统完整性保护 (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
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多