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

“VM初始化期间发生错误,无法加载 native 库:libjava.jnilib”

我已经尝试了解决此问题的所有常用方法(更改符号链接(symbolic link),未设置环境变量)。

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

关于如何使“java -version”正常工作的任何想法?

最佳答案

您可以通过将DYLD_LIBRARY_PATH环境变量设置为该Shell exec的一部分来提示OSX在哪里找到该库。使用相同的二进制文件与它们无关,但是当用完Apache时,该二进制文件是否可以找到与其链接的库。您可以通过运行以下命令查看二进制链接所使用的库:

otool -L <binary>

您将看到libjava.jnilib所在的位置,并将该路径添加到DYLD_LIBRARY_PATH中。您可能需要添加许多库。

祝你好运!

免责声明:DYLD_LIBRARY_PATH的使用存在各种各样的阵营,它可能(像许多事物一样)存在安全风险。但是,由于在这种情况下将shell_exec()用于执行二进制文件并且无需使用绝对路径即可执行二进制文件,因此DYLD_LIBRARY_PATH是安全问题中最少的问题。

关于java - Mac OS X Lion : Error occurred during initialization of VM Unable to load native library: libjava. jnilib,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6850624/

10-11 09:26