ffmpeg MAMP“dyld: 库未加载”错误


ffmpeg MAMP "dyld: Library not loaded" error

我通过 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);

问题是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

注释

掉该行#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,则不会破坏它。

当你使用命令行时,确保 PHP 的exec使用与你相同的 shell。

可能shell_exec文档有帮助。

另请参阅php shell_Exec命令在shell中工作时不起作用。