【问题标题】:Mac OS X Lion: Error occurred during initialization of VM Unable to load native library: libjava.jnilibMac OS X Lion:VM 初始化期间发生错误无法加载本机库:libjava.jnilib
【发布时间】:2011-10-14 14:29:50
【问题描述】:

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

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

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

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

关于如何让“java -version”工作有什么想法吗?

【问题讨论】:

标签: java macos


【解决方案1】:

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

otool -L <binary>

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

祝你好运!

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

【讨论】:

  • 我已经从 bash 和 shell_exec 中检查了 DYLD_LIBRARY_PATH 并且它们返回了相同的东西。我不确定这是否是罪魁祸首。
【解决方案2】:

这对我有用:

<?php
  exec('export DYLD_LIBRARY_PATH=""; java -version');
?>

参考:
- https://drupal.org/node/1257654
- Calling java from PHP exec

【讨论】:

    猜你喜欢
    • 2013-03-16
    • 2012-05-18
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 2018-11-12
    • 1970-01-01
    相关资源
    最近更新 更多