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

6
在BASH中运行"java -version"可以得到正确的结果。但是,当我尝试使用shell_exec()命令从apache上的PHP脚本运行相同的命令时,会出现以下错误:
"Error occurred during initialization of VM Unable to load native library: libjava.jnilib"
我已经尝试了所有常见的解决此问题的方法(更改符号链接,取消设置环境变量)。
我也很确定BASH和脚本都在使用相同的二进制文件。"which java"得到相同的结果。
您有什么想法,如何让"java -version"工作?

1
如果您正在使用MAMP,请参见:https://dev59.com/RGsz5IYBdhLWcg3wy7LU - Mark Fox
2个回答

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,它们返回的是相同的内容。我不确定这是否是罪魁祸首。 - Rui Jiang

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接