我在执行 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 程序在通过终端执行时可以正常工作。
感谢您的帮助!