2012-04-11 14 views
10

Sto usando ffmpeg su Mac OSX 10.7.3 in MAMP tramite il comando exec() di PHP, ho un percorso assoluto impostato per chiamare ffmpeg, ad es.ffmpeg MAMP errore "dyld: libreria non caricata"

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

Ma ricevo il seguente errore -

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 è stato installato tramite Macports.

Funziona dalla riga di comando.

Cosa fare?

EDIT

ho riaperti - originariamente pensato shell_exec() risolto il problema, ma infatti dovrebbe essere chiamato in modo diverso - e non mi rendevo conto fino ad indagare ulteriormente oggi. Ecco il mio codice utilizzando shell_exec e ancora dando l'errore precedente:

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

Forse un problema perché ffmpeg è stato installato tramite Macport e non nell'ambiente MAMP? –

+0

@hakre - come faccio? –

+0

Ho aggiunto questa risposta come risposta, rimuovendo gli altri commenti. – hakre

risposta

30

Il problema è che DYLD_LIBRARY_PATH è impostato in MAMP e ho installato ffmpeg tramite macports.

Questo potrebbe non essere la migliore soluzione, ma mi ha installato e funzionante per ora:

Nel file /Applications/MAMP/Library/bin/envvars e commentare le seguenti righe, come di seguito:

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

e riavviare Apache

+0

Grazie, ho avuto problemi a far funzionare ImageMagic tramite Macports e Mamp. Questo ha funzionato per me e ho anche dovuto aggiungere la seguente riga al mio script php putenv ("PATH =". $ _ENV ["PATH"]. ":/Opt/local/bin"); – Summer

+1

Da tempo ho spostato tutto su Macport. È stato inizialmente un problema far funzionare tutto, ma ne valeva la pena per prevenire questi problemi a lungo termine! –

+0

Funziona davvero –

0

Assicurarsi di PHP exec sta usando la stessa shell come lei, quando si utilizza la riga di comando.

Probabilmente shell_exec­Docs aiuta.

Vedere anche php shell_Exec not working while the command works in shell.

+0

Grazie accettato - altrimenti quali sono le principali differenze tra 'exec' e' shell_exec' che significherebbe che shell_exec funziona ma non exec ? –

+0

@benedict_w: Devo ammettere, non ne ho idea. Ho appena ricordato che questo ha aiutato un po 'di tempo ed è stato discusso in questo modo. 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 - entrambi usano 'VCWD_POPEN' – hakre

+0

Sembra che questa potrebbe non essere la risposta corretta - mentre' exec' mi da il l'errore sopra 'shell_exec' sta restituendo null. Riapertura fino alla risoluzione. :( –

2

Commentando la linea #DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH" funzionerà a breve termine ma potrebbe rompere altre cose, dal momento che stai rimuovendo la linea che MAMP usa per dire al server dove mantiene le sue librerie.

Una soluzione migliore sarebbe quella di cambiare la linea a questo:

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

in modo che si sta solo anteponendo /usr/local/lib: al percorso già-dato. Questo dice ad Apache di cercare prima in /usr/local/lib, e poi se non funziona, cercare in /Applications/MAMP/Library/lib.

Quindi, se si installa qualcosa tramite, ad esempio, Brew e ci sono due versioni, verrà visualizzato in quello che è stato installato prima con Brew, prima di utilizzare qualsiasi cosa fornita con MAMP, che è più probabile che non sia aggiornata . Ma se è qualcosa che è venuto solo con MAMP, che non hai installato separatamente o che è specifico per MAMP, non lo romperesti.

Problemi correlati