2013-05-29 106 views
3

我在執行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程序工作正常。

謝謝你的幫忙!

回答

0

它應該與你的第二個例子,但刪除出口和';'來自shell命令。試試這個,告訴我會發生什麼:

$command = 'LD_LIBRARY_PATH="' . $path_to_library_dir .'" ' . $path_to_binary; 
passthru($command); 
+0

謝謝你的幫助。請檢查我編輯的問題。 :) – user1839550

+0

嘗試用系統替換passthru並使用putenv()來設置LD_LIBRARY_PATH – lexmihaylov

+0

不,我嘗試使用系統,它仍然返回我相同的錯誤。請任何其他想法? – user1839550