passthru() Centos LD_LIBRARY_PATH

У меня возникают проблемы с командой 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-программа будет работать нормально при выполнении через терминал.

Спасибо за помощь!


person user1839550    schedule 29.05.2013    source источник


Ответы (1)


Он должен работать со вторым примером, но удалите экспорт и ';' из команды оболочки. Просто попробуйте это и скажите мне, что происходит:

$command = 'LD_LIBRARY_PATH="' . $path_to_library_dir .'" ' . $path_to_binary;
passthru($command);
person lexmihaylov    schedule 30.05.2013
comment
Попробуйте заменить passthru на system и используйте putenv() для установки LD_LIBRARY_PATH. - person lexmihaylov; 30.05.2013
comment
нет, я пробовал с системой, и она все равно возвращает мне ту же ошибку. Любая другая идея, пожалуйста? - person user1839550; 30.05.2013
comment
можете ли вы дать мне командные строки, которые вы выполняете из оболочки? - person lexmihaylov; 31.05.2013
comment
Из терминала напрямую делаю: › export LD_LIBRARY_PATH="/usr/lib64/jpcap/:$LD_LIBRARY_PATH"java myjavaprogram - person user1839550; 31.05.2013
comment
Хорошо... в моем примере это нужно сделать так, чтобы все 2 строки были одной командой. Итак - passthru('LD_LIBRARY_PATH=/usr/lib64/jpcap/:$LD_LIBRARY_PATH java ./myjavaprogram');. Имеет ли это смысл, и если вы уже пробовали - извините за мой глупый комментарий :) - person lexmihaylov; 31.05.2013
comment
Нет глупого комментария, так как я не смог найти решение своей проблемы. Так что любые пробные варианты приветствуются. :) К сожалению, это все еще не работает, но не могли бы вы объяснить, почему вы поместили ./ перед myjavaprogram? - person user1839550; 31.05.2013
comment
./ это просто моя привычка для выполнения скриптов из текущей папки. Я очень разочарован тем, что ничего не сработало. Последнее, о чем я могу думать, это добавить экспорт LD_LIBRARY_PATH=/usr/lib64/jpcap/:$LD_LIBRARY_PATH в файл .bashrc в домашнем каталоге вашего пользователя. - person lexmihaylov; 31.05.2013
comment
Я добавил его в свой файл .bashrc и знаю, что он работает, поскольку мне больше не нужно экспортировать LD_LIBRARY_PATH... в мой терминал, когда я запускаю свою java-программу. Но при запуске с php через system/passthru/shell_exec... все равно не работает. У меня есть одна вещь, о которой я не знаю, может предоставить дополнительную информацию, когда я делаю shell_exec (java -версия), ничего не возвращается. Принимая во внимание, что когда я делаю это в терминале, это работает. Это связано с моей проблемой? :С - person user1839550; 31.05.2013