Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mac OS X Lion:初始化VM时出错,无法加载本机库:libjava.jnilib_Java_Macos - Fatal编程技术网

Mac OS X Lion:初始化VM时出错,无法加载本机库:libjava.jnilib

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

在BASH中运行“java-version”可以得到正确的结果。但是,当我从apache上的PHP脚本中使用shell_exec()命令尝试相同的命令时,我得到:

“初始化VM时出错,无法加载本机库:libjava.jnilib”

我已经尝试了解决这个问题的所有常用方法(更改符号链接、取消设置环境变量)

我也非常确定BASH和脚本都使用相同的二进制文件。“哪个java”产生相同的结果


关于如何让“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,请参阅: