ffmpeg MAMP ошибка "dyld: библиотека не загружена"

Я использую ffmpeg на Mac OSX 10.7.3 в MAMP через PHP exec() команда, у меня есть абсолютный путь для вызова 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

NB ffmpeg был установлен через Macports.

Это работает из командной строки.

Что делать?

РЕДАКТИРОВАТЬ

Я снова открыл это - изначально думал shell_exec() решил проблему, но на самом деле она должна называться по-другому - и я не понял, пока продолжу расследование сегодня. Вот мой код с использованием shell_exec и все еще выдающий ошибку выше:

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

3 ответа

Решение

Проблема в том, что DYLD_LIBRARY_PATH установлен в MAMP, и я установил ffmpeg через macports.

Возможно, это не лучшее решение, но пока оно работает и работает:

в /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_exec Документы помогают.

Смотрите также php shell_Exec не работает, пока команда работает в оболочке.

Другие вопросы по тегам