【问题标题】:ffmpeg MAMP "dyld: Library not loaded" errorffmpeg MAMP“dyld:未加载库”错误
【发布时间】:2012-04-23 20:38:50
【问题描述】:

我通过 PHP 的 exec() 命令在 MAMP 中的 Mac OSX 10.7.3 上使用 ffmpeg,我设置了一个绝对路径来调用 ffmpeg,例如

/opt/local/bin/ffmpeg -i "/sample.avi"

但我收到以下错误 -

dyld: Library not loaded: /opt/local/lib/libjpeg.8.dylib  Referenced from: /opt/local/lib/libopenjpeg.1.dylib  Reason: Incompatible library version: libopenjpeg.1.dylib requires version 13.0.0 or later, but libJPEG.dylib provides version 12.0.0

注意ffmpeg 是通过 Macports 安装的。

它可以从命令行运行。

怎么办?

编辑

我重新打开了这个 - 最初认为 shell_exec() 解决了这个问题,但实际上它应该被称为不同的 - 我直到今天进一步调查才意识到。这是我使用 shell_exec 的代码,但仍然出现上述错误:

 $cmd = '/opt/local/bin/ffmpeg -h';
 $cmd = escapeshellcmd($cmd) . ' 2>&1';
 $output = shell_exec($cmd);
 var_dump($output);

【问题讨论】:

  • 可能是一个问题,因为 ffmpeg 是通过 macports 安装的,而不是在 MAMP 环境中?
  • 我现在添加了这个作为答案,删除了其他 cmets。
  • 我的错:shell_exec 正在返回 null - 我直到今天进一步调查才注意到。当我正确调用shell_exec 时,我得到了同样的错误。

标签: php macos ffmpeg


【解决方案1】:

问题是 DYLD_LIBRARY_PATH 是在 MAMP 中设置的,我已经通过 macports 安装了 ffmpeg。

这可能不是最好的解决方法,但它让我现在可以启动并运行:

/Applications/MAMP/Library/bin/envvars 文件中并注释以下行:

#DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
#export DYLD_LIBRARY_PATH

然后重启 Apache

【讨论】:

  • 谢谢。我无法通过 macports 和 mamp 让 ImageMagic 工作。这对我有用,我还必须将以下行添加到我的 php 脚本 putenv("PATH=" . $_ENV["PATH"] . ":/opt/local/bin");
  • 我早就把所有东西都移到了 macports 上。最初让所有东西都启动并运行起来很痛苦,但从长远来看,防止这些小问题是值得的!
【解决方案2】:

注释掉#DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH" 行将在短期内起作用,但它可能会破坏其他事情,因为您要删除MAMP 用来告诉服务器将其库保存在何处的行。

更好的解决方案是将行改为:

DYLD_LIBRARY_PATH="/usr/local/lib:/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"

所以你只是在已经给定的路径前面加上/usr/local/lib:。这告诉 Apache 先查看/usr/local/lib,然后如果不起作用,再查看/Applications/MAMP/Library/lib

因此,如果您通过 Brew 安装某些东西,并且有两个版本,它会先查看您使用 Brew 安装的版本,然后再使用 MAMP 随附的任何版本,这很可能已过时。但是,如果它只是 MAMP 附带的,您没有单独安装或者是特定于 MAMP 的,您不会破坏它。

【讨论】:

    【解决方案3】:

    确保 PHP 的 exec 在您使用命令行时使用与您相同的 shell。

    可能shell_exec­Docs 有帮助。

    另见php shell_Exec not working while the command works in shell

    【讨论】:

    • 感谢接受 - 否则 execshell_exec 之间的主要区别是什么,这意味着 shell_exec 可以工作但不能执行?
    • @benedict_w:我不得不承认,我不知道。我只记得这确实有一段时间有帮助,而且有人这样争论。 lxr.php.net/opengrok/xref/PHP_5_4/ext/standard/exec.c#53 ; lxr.php.net/opengrok/xref/PHP_5_4/ext/standard/exec.c#434 - 两者都在使用 VCWD_POPEN
    • 看起来这可能不是正确的答案 - 而 exec 给我上面的错误 shell_exec 返回 null。重新打开直到解决。 :(
    • 我用 shell_exec 命令修复了一个单独的问题,现在它给了我与上述相同的错误。
    • 检查用户,例如做一些shellexec('whoami').
    猜你喜欢
    • 2014-07-25
    • 1970-01-01
    • 2018-11-07
    • 2011-02-27
    • 2017-06-30
    • 2020-06-15
    • 2015-01-15
    • 2014-11-30
    相关资源
    最近更新 更多