3

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

我试过了:

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

passthru("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 = '导出 LD_LIBRARY_PATH="' . $path_to_library_dir .'"; ' . $path_to_binary; passthru($command);

我也试过了。但我不知道做错了什么。

请问,有人可以帮忙吗?

谢谢!


编辑 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 程序在通过终端执行时可以正常工作。

感谢您的帮助!

4

1 回答 1

0

它应该适用于您的第二个示例,但删除导出和 ';' 从 shell 命令。试试这个,告诉我会发生什么:

$command = 'LD_LIBRARY_PATH="' . $path_to_library_dir .'" ' . $path_to_binary;
passthru($command);
于 2013-05-30T12:15:02.890 回答