How to set LD_LIBRARY_PATH/DYLD_LIBRARY_PATH on macos

后端 未结 2 953
感情败类
感情败类 2021-01-06 11:52

On macos catalina \'\'\'echo $VARIABLE\'\'\'

I see the value of the variable but java couldn\'t read the system variable.

In linux there is not a problem

相关标签:
2条回答
  • 2021-01-06 12:11

    Variables LD_LIBRARY_PATH / DYLD_LIBRARY_PATH are not passed to the environment of a child process on macOS if System Integrity Protect (SIP) is enabled.

    To confirm :

    #!/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 讨论(0)
  • 2021-01-06 12:21

    I believe that any given env variable in a process is not necessarily copied to any processes spawned from it.

    So, here, your zsh process clearly has the LD_LIBRARY_PATH env variable, but your java process does not.

    If you set it like so:

    LD_LIBRARY_PATH=/Applications/blabla

    you'd get this behaviour. You're looking for:

    export LD_LIBRARY_PATH=/Applications/blabla

    0 讨论(0)
提交回复
热议问题