从java ProcessBuilder运行ffprobe失败

从java ProcessBuilder运行ffprobe失败,java,processbuilder,ffprobe,Java,Processbuilder,Ffprobe,很抱歉,因为我是linux新手。操作系统“Ubuntu12-04-AutogenByAWSMP” 从我的servlet中,我希望启动ffprobe来了解有关电影文件的信息 在命令行中,这可以正常工作。从java内部,这总是失败:(从错误流) /usr/bin/ffprobe:/opt/bitnami/common/lib/libstdc++.so.6:找不到版本'GLIBCXX_3.4.11'(为/usr/lib/x86_64-linux-gnu/libjack.so.0所需) /usr/bin

很抱歉,因为我是linux新手。操作系统“Ubuntu12-04-AutogenByAWSMP”

从我的servlet中,我希望启动ffprobe来了解有关电影文件的信息

在命令行中,这可以正常工作。从java内部,这总是失败:(从错误流)

/usr/bin/ffprobe:/opt/bitnami/common/lib/libstdc++.so.6:找不到版本'GLIBCXX_3.4.11'(为/usr/lib/x86_64-linux-gnu/libjack.so.0所需) /usr/bin/ffprobe:/opt/bitnami/common/lib/libstdc++.so.6:找不到版本'GLIBCXX_3.4.9'(由/usr/lib/x86_64-linux-gnu/libjack.so.0所需) /usr/bin/ffprobe:/opt/bitnami/common/lib/libstdc++.so.6:找不到版本'GLIBCXX_3.4.15'(由/usr/lib/x86_64-linux-gnu/libjack.so.0所需) /usr/bin/ffprobe:/opt/bitnami/common/lib/libstdc++.so.6:找不到版本'GLIBCXX_3.4.9'(由/usr/lib/libopencv_core.so.2.3要求) 我的java代码是:

private static String PATH_FOR_ENV = "=/opt/bitnami/sqlite/bin:/opt/bitnami/java/bin:/opt/bitnami/php/bin:/opt/bitnami/mysql/bin:/opt/bitnami/apache2/bin:/opt/bitnami/common/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games";

.....

     final ProcessBuilder builder = new ProcessBuilder();

            builder.redirectErrorStream(true);
            List<String> params = createCommand("ffprobe");
            this.addFFProbeArgs(params);
            params.add(src.getAbsolutePath());
            ProcessBuilder command = builder.command(params);
            if(isLinux())
                 command.environment().put("LIBPATH", PATH_FOR_ENV);
            Process p= command.start();

            InputStream input = p.getInputStream();
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            byte[] bytes = new byte[1024];
            int read;
            while ((read = input.read(bytes)) != -1)
            {
                bos.write(bytes, 0, read);
            }
            input.close();
            p.waitFor();
            String info = new String(bos.toByteArray());
            System.out.println(info);
private static String PATH_FOR_ENV=“=/opt/bitnami/sqlite/bin:/opt/bitnami/java/bin:/opt/bitnami/php/bin:/opt/bitnami/mysql/bin:/opt/bitnami/apache2/bin:/opt/bitnami/common/bin:/usr/local/sbin:/usr/sbin:/usr/sbin:/usr/bin:/sbin:/usr/bin:/usr/bin:/usr/games”;
.....
最终ProcessBuilder=新的ProcessBuilder();
builder.redirectErrorStream(true);
List params=createCommand(“ffprobe”);
此.addFFProbeArgs(参数);
params.add(src.getAbsolutePath());
ProcessBuilder命令=builder.command(参数);
if(isLinux())
command.environment();
进程p=命令.start();
InputStream输入=p.getInputStream();
ByteArrayOutputStream bos=新建ByteArrayOutputStream();
字节[]字节=新字节[1024];
int-read;
而((读取=输入。读取(字节))!=-1)
{
写入(字节,0,读取);
}
input.close();
p、 waitFor();
字符串信息=新字符串(bos.toByteArray());
系统输出打印项次(信息);
额外助手

private void addFFProbeArgs(List<String> pParams)
    {
        pParams.add("-v");
        pParams.add("quiet");
        pParams.add("-show_streams");
        pParams.add("-show_format");
        pParams.add("json");
    }
private List<String> createCommand(String pCommand)
    {
        List<String> commandParams = new ArrayList<String>();
        if(isLinux())
        {
            //commandParams.add("/bin/bash");
            //commandParams.add("-c");
        }
        commandParams.add(ROOT_DIR+ pCommand);
        return commandParams;
    }

private static String       ROOT_DIR = "/usr/bin/";
private void addFFProbeArgs(列表pParams)
{
p.添加(“-v”);
p.添加(“安静”);
pParams.添加(“-show_streams”);
pParams.add(“-show_格式”);
添加(“json”);
}
私有列表createCommand(字符串pCommand)
{
List commandParams=new ArrayList();
if(isLinux())
{
//commandParams.add(“/bin/bash”);
//commandParams.add(“-c”);
}
commandParams.add(根目录+pCommand);
返回命令参数;
}
私有静态字符串ROOT_DIR=“/usr/bin/”;
我知道这些代码并不漂亮(在我试图找出问题的过程中一直步履蹒跚)。我做了很多谷歌搜索和阅读(包括这个网站上的很多)。您可以看到我尝试过的一些注释,例如将/bin/bash-c放在ffprobe前面。此外,我目前正在将LIBPATH设置为与在提示符下工作的路径相同(抓取@straws)


有什么想法吗?提前感谢。

能否尝试临时移动libstdc++然后再次执行代码

$ mkdir /opt/bitnami/backup.libstdc++
$ mv /opt/bitnami/common/lib/libstdc++.*  /opt/bitnami/backup.libstdc++