【问题标题】:passthru() centos LD_LIBRARY_PATHpassthru() centos LD_LIBRARY_PATH
【发布时间】:2023-03-29 09:00:01
【问题描述】:

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

感谢您的帮助!

【问题讨论】:

    标签: java php path exec passthru


    【解决方案1】:

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

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

    【讨论】:

    • 尝试用系统替换 passthru 并使用 putenv() 设置 LD_LIBRARY_PATH
    • 不,我尝试使用系统,但它仍然返回相同的错误。请问还有什么好办法吗?
    • 你能给我你从 shell 执行的命令行吗?
    • 从我直接做的终端:> export LD_LIBRARY_PATH="/usr/lib64/jpcap/:$LD_LIBRARY_PATH" > java myjavaprogram
    • 好的 .. 我的例子必须完成的方式是所有 2 行都应该是一个命令。所以 - passthru('LD_LIBRARY_PATH="/usr/lib64/jpcap/:$LD_LIBRARY_PATH" java ./myjavaprogram');。这有意义吗?如果您已经尝试过-请原谅我的愚蠢评论:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 2013-08-16
    • 1970-01-01
    • 2010-10-18
    相关资源
    最近更新 更多