我在執行Java程序時遇到passthru()命令的麻煩。更具體地說,使用passthru來設置LD_LIBRARY_PATH。passthru()centos LD_LIBRARY_PATH
我想:
- setting the .so file path directly like this:
passthru("java -Djava.library.path='.:/path/to/directory/of/.so/object' " HelloWorld);
writing a shell script which sets the LD_LIBRARY_PATH,then executing the shell script using passthru.
acessing the /etc/profile file and adding the "export LD_LIBRARY_PATH..." line in the document.
這是我發現我本以爲這工作只是在網上幾個解決方案,但沒有奏效。我認爲,問題來自級聯的東西在中繼命令我看到了幾個網站類似的東西:
$command = 'export LD_LIBRARY_PATH="' . $path_to_library_dir .'"; ' . $path_to_binary; passthru($command);
這也是我tried.But我不知道我做錯了。
請問誰能幫忙?
謝謝!
EDIT 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程序工作正常。
謝謝你的幫忙!
謝謝你的幫助。請檢查我編輯的問題。 :) – user1839550
嘗試用系統替換passthru並使用putenv()來設置LD_LIBRARY_PATH – lexmihaylov
不,我嘗試使用系統,它仍然返回我相同的錯誤。請任何其他想法? – user1839550