У меня возникают проблемы с командой passthru() при выполнении программ Java. В частности, с установкой LD_LIBRARY_PATH с использованием passthru.
Я старался:
- установка пути к файлу .so непосредственно следующим образом:
passthru("java -Djava.library.path='.:/path/to/directory/of/.so/object' " HelloWorld);
написание сценария оболочки, который устанавливает LD_LIBRARY_PATH, а затем выполнение сценария оболочки с использованием passthru.
доступ к файлу /etc/profile и добавление строки «export LD_LIBRARY_PATH...» в документ.
Это всего лишь несколько решений, которые я нашел в Интернете, и я думал, что они сработают, но ни одно из них не сработало. Я полагал, что проблемы возникают из-за конкатенации в команде passthru, поскольку я видел на нескольких сайтах такие вещи:
$command = 'экспорт LD_LIBRARY_PATH="' . $path_to_library_dir .'"; ' . $path_to_binary; проход($команда);
который я также пробовал. Но я не знаю, что делаю неправильно.
Пожалуйста, кто-нибудь может помочь?
Благодарю вас!
ИЗМЕНИТЬ 1
Используя предложение @lexmihaylov:
Привет, спасибо за ответ. На самом деле я получаю "java.lang.UnsatisfiedLinkError:/usr/lib/libjpcap.so". Вот почему я пытаюсь настроить LD_LIBRARY_PATH для моего объекта .so.
Из вашего ответа я попытался:
$Path_to_library_dir = '/usr/lib64/jpcap';
$Path_to_binary = '/usr/lib64/jpcap/libjpcap.so';
$command = 'LD_LIBRARY_PATH="' . $Path_to_library_dir .'" '.$Path_to_binary;
passthru($command);
$java_execution = "java myjavaprogram 2>&1";
echo passthru($java_execution,$output); echo $output;
Я все еще получаю тот же java.lang.UnsatisfiedLinkError. Но если я установлю LD_LIBRARY_PATH непосредственно в своем терминале, моя java-программа будет работать нормально при выполнении через терминал.
Спасибо за помощь!