2012-03-08 7 views
5

Sto compilando FFmpeg dal codice sorgente.

./configure --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-x11grab --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 
make 
make install 

ldd /usr/local/bin/ffmpeg mi ha dato questa

linux-gate.so.1 => (0xb7717000) 
libavdevice.so.53 => not found 
libavfilter.so.2 => not found 
libavformat.so.54 => not found 
libavcodec.so.54 => not found 
libpostproc.so.52 => not found 
libswresample.so.0 => not found 
libswscale.so.2 => not found 
libavutil.so.51 => not found 
libm.so.6 => /lib/i386-linux-gnu/tls/i686/nosegneg/libm.so.6 (0xb76e3000) 
libpthread.so.0 => /lib/i386-linux-gnu/tls/i686/nosegneg/libpthread.so.0 (0xb76ca000) 
libc.so.6 => /lib/i386-linux-gnu/tls/i686/nosegneg/libc.so.6 (0xb7569000) 
/lib/ld-linux.so.2 (0xb7718000) 

Impostazione $LD_LIBRARY_PATH per /usr/local/lib corretto gli errori "non trovato", ma per i motivi menzionati here, non voglio impostare $LD_LIBRARY_PATH permanantly.

Ho ricondizionato con gli stessi comandi, questa volta con $LD_RUN_PATH impostato su /usr/local/lib.
make sembra aver ignorato $LD_RUN_PATH durante la compilazione.

C'è un modo per utilizzare $LD_RUN_PATH senza apportare modifiche estese al Makefile?

+0

Potete collegare correttamente a mano (cioè sulla riga di comando, senza usando make)? – Beta

+0

Non lo so. Come posso testarlo? – htoip

+0

Puoi mostrarci la parte del makefile che esegue 'ldd/usr/local/bin/ffmpeg'? – Beta

risposta

5

Avete un motivo per compilare il file binario in modalità condivisa (come voler creare un software per collegarsi a loro)? Se un binario statico 'ffmpeg' funziona altrettanto bene per te, configura senza l'opzione --enable-shared per eliminare queste dipendenze.

In caso contrario, è necessario lasciare che il sistema sa dove le librerie condivise vivono, sia impostando LD_LIBRARY_PATH nell'ambiente, anteponendo esecuzioni di 'ffmpeg' con LD_LIBRARY_PATH (per esempio, "LD_LIBRARY_PATH =/usr/local/lib/usr/local/bin/ffmpeg ") o aggiornare il percorso della libreria del sistema con la posizione corretta.

C'è un'altra soluzione che si trova nella parte inferiore della pagina che hai collegato nel tuo post: "LDFLAGS = '- L/my/strano/percorso/lib -Wl, -rpath/my/strano/percorso/lib '". Per FFmpeg, e per la vostra situazione, passare questo parametro in più al momento della configurazione:

--extra-ldflags="-L/usr/local/lib -Wl,-rpath /usr/local/lib" 

E binario conseguenti 'ffmpeg' saprà dove trovare le librerie condivise.

Molte soluzioni a questo.

+0

Non so se ho bisogno dell'opzione condivisa, ma che cosa usano le istruzioni. Il '--extra-ldflags' funzionava perfettamente. – htoip

2

Per chiunque altro si imbatta in questo, il motivo $LD_RUN_PATH non funzionava potrebbe essere dovuto a this bug con il linker oro.

(La soluzione è utilizzare rpath come descritto nella risposta di Mike)

2
  1. Molto probabilmente LD_RUN_PATH viene ignorata perché ./configure del pacchetto è già messo qualche -Wl, opzioni -rpath in cmdline di linker (francamente non conosco me stesso. Vedo lo stesso comportamento qui, ma sono cross compilazione da 486 a mips32).

  2. provare a eseguire la configurazione in questo modo: ./configure LDFLAGS = "- L/tua/lib -Wl, -rpath-link =/tuoi/lib" CPPFLAGS = "- I/tua/include" --prefix =/TGT ...

    mi consiglia di utilizzare -rpath-link, invece di -rpath se/la directory è diverso da/TGT