2012-04-11 19 views
10

Ich benutze ffmpeg auf Mac OSX 10.7.3 in MAMP durch PHP exec() Befehl, ich habe einen absoluten Pfad festgelegt, um ffmpeg, z.ffmpeg MAMP "dyld: Bibliothek nicht geladen" Fehler

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

Aber ich die folgende Fehlermeldung -

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 

N. B. ffmpeg wurde über Macports installiert.

Es funktioniert über die Befehlszeile.

Was ist zu tun?

EDIT

Ich habe diese wieder geöffnet - ursprünglich gedacht shell_exec() das Problem gelöst, aber infact es anders genannt werden sollte - und ich, bis die Untersuchung weiter heute nicht erkennen. Hier ist mein Code shell_exec verwenden und immer noch gibt den Fehler oben:

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

Möglicherweise ein Problem, weil ffmpeg über Macports und nicht in der MAMP-Umgebung installiert wurde? –

+0

@hakre - wie mache ich das? –

+0

Ich habe dies jetzt als Antwort hinzugefügt und die anderen Kommentare entfernt. – hakre

Antwort

30

Das Problem ist, dass der DYLD_LIBRARY_PATH in MAMP festgelegt ist und ich habe ffmpeg über Macports installiert.

Dies ist vielleicht nicht die beste fix sein, aber es hat mich von oben bis jetzt läuft:

In der /Applications/MAMP/Library/bin/envvars Datei und kommentieren Sie die folgenden Zeilen wie folgt:

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

und starten Sie Apache

+0

Danke, ich hatte Probleme mit ImageMagic über MacPort und Mamp zu arbeiten. Das funktionierte für mich und ich musste auch die folgende Zeile zu meinem PHP Skript hinzufügen: putenv ("PATH =". $ _ENV ["PATH"]. ":/Opt/local/bin"); – Summer

+1

Ich habe schon lange alles auf MacPorts umgestellt. Es war anfangs ein Problem, alles auf den neusten Stand zu bringen, aber es lohnt sich, diese Fehler auf lange Sicht zu verhindern! –

+0

Das funktioniert wirklich –

0

Stellen Sie sicher, PHP exec wird mit der gleichen Schale, wie Sie, wenn Sie die Kommandozeile verwenden.

Wahrscheinlich shell_exec­Docs hilft.

Siehe auch php shell_Exec not working while the command works in shell.

+0

Danke akzeptiert - sonst was sind die Hauptunterschiede zwischen 'exec' und' shell_exec' was bedeuten würde, dass shell_exec funktioniert, aber nicht exec ? –

+0

@benedict_w: Ich muss zugeben, ich habe keine Ahnung. Ich erinnerte mich, dass das eine Zeit lang geholfen hatte und es wurde so argumentiert. http://lxr.php.net/opengrok/xref/PHP_5_4/ext/standard/exec.c#53; http://lxr.php.net/opengrok/xref/PHP_5_4/ext/standard/exec.c#434 - beide verwenden 'VCWD_POPEN' – hakre

+0

Sieht so aus, als ob das nicht die richtige Antwort wäre - während' exec' mir das gibt Fehler oberhalb von 'shell_exec' gibt null zurück. Wiedereröffnung bis gelöst. :( –

2

Das Auskommen der Zeile #DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH" wird kurzfristig funktionieren, aber es könnte andere Dinge brechen, da Sie die Zeile entfernen, die MAMP verwendet, um dem Server mitzuteilen, wo er seine Bibliotheken aufbewahrt.

Eine bessere Lösung wäre die Linie, dies zu ändern:

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

so dass Sie gerade das Voranstellen /usr/local/lib: auf den bereits angegebenen Pfad. Dies sagt Apache in /usr/local/lib zuerst zu suchen, und dann, wenn das nicht funktioniert, in /Applications/MAMP/Library/lib zu suchen.

Also wenn du etwas über, sagen wir, Brew installierst und es zwei Versionen gibt, wird es in der zuerst mit Brew installierten aussehen, bevor es verwendet, was mit MAMP kam, was eher veraltet ist . Aber wenn es etwas ist, das nur mit MAMP geliefert wurde, das du nicht separat installiert hast oder das MAMP-spezifisch ist, wirst du es nicht brechen.

Verwandte Themen