Mac OS X Lion:VM初始化期间发生错误无法加载本机库:libjava.jnilib

Rui*_*ang 6 java macos

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

"VM初始化期间发生错误无法加载本机库:libjava.jnilib"

我已经尝试了所有常见的修复此问题(更改符号链接,取消设置env变量).

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

关于如何让"java -version"工作的任何想法?

Jus*_*tin 1

您可以通过将 DYLD_LIBRARY_PATH 环境变量设置为 shell 执行的一部分,向 OSX 提示在哪里可以找到该库。这与它们使用相同的二进制文件无关,而是在 apache 耗尽时该二进制文件是否可以找到它链接到的库。您可以通过运行以下命令查看二进制文件链接的库:

otool -L <binary>
Run Code Online (Sandbox Code Playgroud)

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

祝你好运!

免责声明:围绕 DYLD_LIBRARY_PATH 的使用存在各种阵营,它可能(像许多事情一样)存在安全风险。然而,由于在这种情况下 shell_exec() 用于执行二进制文件并且在不使用绝对路径的情况下执行此操作,因此 DYLD_LIBRARY_PATH 的安全问题最少。