2012-12-11 11 views
37

Ich habe versucht, meine ffmpeg, nach diesem , auf meinem ARM Ubuntu-Rechner neu zu installieren. Unfortunatley, wenn ich ein Programm zusammenstellen, die diese lib verwendet ich folgendes Scheitern erhalten:wie neu kompilieren mit -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 

Jetzt würde ich es mit -fPIC neu kompilieren möchte, wie der Compiler darauf hindeutet, aber ich habe keine Ahnung wie. Jede Hilfe wird geschätzt.

Antwort

51

kurz gesagt, bedeutet der Fehler, dass Sie keine statische Bibliothek verknüpft werden w/einer dynamischen verwenden können ein. Der korrekte Weg besteht darin, einen libavcodec in .so anstelle von .a zu kompilieren, damit die andere .so-Bibliothek, die Sie erstellen möchten, gut verlinkt ist.

Der kürzeste Weg dazu ist --enable-shared unter ./configure Optionen hinzuzufügen. oder Sie versuchen sogar, freigegebene (oder statische) Bibliotheken zu deaktivieren ... Sie wählen, was für Sie geeignet ist!

+0

Ja, keine Notwendigkeit, 'export' zu verwenden oder ein Makefile zu bearbeiten. – LordNeckbeard

+0

Sie haben mich gerade vor einem starken Kopfweh mit '--enable-shared' gerettet. Vielen Dank! – Benjamin

+0

Danke dafür! Ich möchte auch hinzufügen, dass ich auch "make distclean" machen musste, wenn ich make erneut ausführen wollte, um einige Dateien loszuwerden, die bereits auf statische Weise kompiliert worden waren. –

5

Nach dem Konfigurationsschritt haben Sie wahrscheinlich ein Makefile. In diesem Makefile suchen Sie nach CFLAGS (oder ähnlich). puf -fPIC am ende und lauf wieder machen. Mit anderen Worten: -fPIC ist eine Compileroption, die irgendwo an den Compiler übergeben werden muss.

13

Werfen Sie einen Blick auf this page.

Sie können global versuchen, die Flagge Hinzufügen mit: export CXXFLAGS="$CXXFLAGS -fPIC"

+0

Dieses eine Knotenpaketinstallationsprogramm festgelegt (für Knoten-swipl) das node-gyp verwendet und denselben Fehler erzeugt hat. Danke :) – Sarophym

+0

Ich habe einen Ersatz für den toten Link in archive.org hinzugefügt – rubo77

-1

Bevor sicher, Kompilieren, dass „rules.mk“ Datei richtig in Makefile enthalten ist oder ist es ausdrücklich:

„Quelle rules.mk“

Verwandte Themen