执行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程序在通过终端执行时工作正常。
感谢您的帮助!
答案 0 :(得分:0)
它应该与你合作第二个例子,但删除导出和';'从shell命令。试试这个并告诉我会发生什么:
$command = 'LD_LIBRARY_PATH="' . $path_to_library_dir .'" ' . $path_to_binary;
passthru($command);