2012-12-11 12 views
37

Stavo cercando di reinstallare il mio ffmpeg, seguendo questo guide, sulla mia macchina ARM Ubuntu. Unfortunatley, quando compilo un programma che utilizza questa lib ottengo il seguente errore:come ricompilare con -fPIC

/usr/bin/ld: /usr/local/lib/libavcodec.a(amrnbdec.o): relocation R_ARM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC 
/usr/local/lib/libavcodec.a: could not read symbols: Bad value 
collect2: ld returned 1 exit status 

Ora vorrei ricompilare con -fPIC come il compilatore sta suggerendo, ma non ho idea di come. Qualsiasi aiuto è apprezzato.

risposta

51

in breve, l'errore significa che non è possibile utilizzare una libreria statica da collegare w/una dinamica uno. Il modo corretto è di avere un libavcodec compilato in .so anziché in .a, quindi l'altra libreria .so che stai cercando di costruire si collegherà bene.

il modo più semplice per farlo è aggiungere --enable-shared alle opzioni ./configure. o anche tu potresti provare a disabilitare le librerie condivise (o statiche) ... tu scegli quello che è adatto a te!

+0

Sì, non c'è bisogno di usare "export" o modificare un makefile. – LordNeckbeard

+0

Mi hai appena salvato da un forte mal di testa con '--enable-shared'. Grazie! – Benjamin

+0

Grazie per questo! Voglio anche aggiungere che ho dovuto anche fare 'make distclean' quando ri-esegue make per sbarazzarsi di alcuni file che erano già stati compilati in modo statico. –

5

Dopo il passaggio di configurazione, probabilmente si dispone di un makefile. All'interno di questo makefile cerca CFLAGS (o simile). puf -fPIC alla fine ed esegui nuovamente make. In altre parole -fPIC è un'opzione del compilatore che deve essere passata al compilatore da qualche parte.

13

Dai un'occhiata alla this page.

si può provare a livello globale aggiungere il flag utilizzando: export CXXFLAGS="$CXXFLAGS -fPIC"

+0

Questa fissato un pacchetto di installazione nodo (per il nodo-swipl) che stava usando node-gyp e stava producendo lo stesso errore. Grazie :) – Sarophym

+0

Ho aggiunto un sostituto per il collegamento morto in archive.org – rubo77

-1

Prima di compilare assicurarsi che "rules.mk" file è incluso correttamente in Makefile o includere esplicitamente da:

"fonte rules.mk"

Problemi correlati