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 не работает, пока команда работает в оболочке.