Mac OS X Lion:初始化VM时出错,无法加载本机库:libjava.jnilib
在BASH中运行“java-version”可以得到正确的结果。但是,当我从apache上的PHP脚本中使用shell_exec()命令尝试相同的命令时,我得到: “初始化VM时出错,无法加载本机库:libjava.jnilib” 我已经尝试了解决这个问题的所有常用方法(更改符号链接、取消设置环境变量) 我也非常确定BASH和脚本都使用相同的二进制文件。“哪个java”产生相同的结果Mac OS X Lion:初始化VM时出错,无法加载本机库:libjava.jnilib,java,macos,Java,Macos,在BASH中运行“java-version”可以得到正确的结果。但是,当我从apache上的PHP脚本中使用shell_exec()命令尝试相同的命令时,我得到: “初始化VM时出错,无法加载本机库:libjava.jnilib” 我已经尝试了解决这个问题的所有常用方法(更改符号链接、取消设置环境变量) 我也非常确定BASH和脚本都使用相同的二进制文件。“哪个java”产生相同的结果 关于如何让“java-version”工作,您有什么想法吗?您可以通过将DYLD\u library\u PAT
关于如何让“java-version”工作,您有什么想法吗?您可以通过将DYLD\u library\u PATH环境变量设置为shell exec的一部分,来提示OSX在哪里可以找到该库。这与它们使用相同的二进制文件无关,但是当apache用完时,该二进制文件是否能够找到它链接到的库。通过运行以下命令,可以查看二进制链接的库:
otool -L <binary>
otool-L
您将看到libjava.jnilib所在的位置,并将该路径添加到您的DYLD_LIBRARY_路径中。可能需要为许多库添加路径
祝你好运
免责声明:使用DYLD_LIBRARY_PATH有各种阵营,它可能(像许多事情一样)存在安全风险。但是,由于在本例中,shell_exec()用于执行二进制文件,并且不使用绝对路径,因此DYLD_LIBRARY_路径是最不安全的问题。这对我来说很有效:
<?php
exec('export DYLD_LIBRARY_PATH=""; java -version');
?>
我已经从bash和shell-exec检查了DYLD\u-LIBRARY\u路径,它们返回了相同的内容。我不确定这是否是罪魁祸首。如果您使用MAMP,请参阅: