Mac OS X Lion: во время инициализации виртуальной машины произошла ошибка. Невозможно загрузить собственную библиотеку: libjava.jnilib - PullRequest
6 голосов
/ 28 июля 2011

Запуск "java -version" в BASH дает правильный результат. Однако, когда я пытаюсь выполнить ту же команду с помощью команды shell_exec () из PHP-скрипта на apache, я получаю:

"Произошла ошибка при инициализации ВМ. Невозможно загрузить собственную библиотеку: libjava.jnilib"

Я попробовал все обычные исправления для этой проблемы (изменение символических ссылок, сброс переменных env).

Я также вполне уверен, что и BASH, и скрипт используют один и тот же двоичный файл. "Какие Java" дает тот же результат.

Есть мысли о том, как заставить работать "java-версию"?

Ответы [ 2 ]

1 голос
/ 28 июля 2011

Вы можете дать OSX подсказку, где найти эту библиотеку, установив переменную окружения DYLD_LIBRARY_PATH как часть этого shell-exec. Это не имеет ничего общего с ними, использующими один и тот же двоичный файл, но может ли этот двоичный файл найти библиотеки, с которыми он связан, когда не работает apache. Вы можете увидеть, с какими библиотеками связаны двоичные файлы, запустив:

otool -L <binary>

Вы увидите, где находится libjava.jnilib, и добавите этот путь к вашему DYLD_LIBRARY_PATH. Может быть много библиотек, для которых нужно добавить пути.

Удачи!

Отказ от ответственности: существует множество лагерей вокруг использования DYLD_LIBRARY_PATH, это может (как и многие другие вещи) быть угрозой безопасности. Однако, поскольку в этом случае shell_exec () используется для выполнения двоичных файлов И делает это без использования абсолютного пути, DYLD_LIBRARY_PATH является наименьшей из проблем безопасности.

0 голосов
/ 30 мая 2014

Это сработало для меня:

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

Ссылки:
- https://drupal.org/node/1257654
- Вызов Java из PHP exec

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...