passthru()centos LD_LIBRARY_PATH

时间:2013-05-29 18:34:45

标签: java php path exec passthru

执行Java程序时,我遇到了passthru()命令的麻烦。更具体地说,使用passthru设置LD_LIBRARY_PATH。

我试过了:

  
      
  • 直接设置.so文件路径:
  •   
     

通路(“java的   -Djava.library.path ='。:/ path / to / directory / of / .so / object'“HelloWorld);

     
      
  • 编写一个设置LD_LIBRARY_PATH的shell脚本,然后使用passthru执行shell脚本。

  •   
  • 访问/ etc / profile文件并在文档中添加“export LD_LIBRARY_PATH ...”行。

  •   

这些只是我在网上找到的一些我觉得可行的解决方案,但都没有效果。我相信问题来自passthru命令中的连接,正如我在几个网站上看到的那样:

  

$ command ='export 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程序在通过终端执行时工作正常。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

它应该与你合作第二个例子,但删除导出和';'从shell命令。试试这个并告诉我会发生什么:

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