Heim >Backend-Entwicklung >C++ >Warum erhalte ich beim Kompilieren mit ffmpeg einen Verschiebungsfehler und wie kann ich ihn beheben?

Warum erhalte ich beim Kompilieren mit ffmpeg einen Verschiebungsfehler und wie kann ich ihn beheben?

Barbara Streisand
Barbara StreisandOriginal
2024-11-08 04:21:01510Durchsuche

Why do I get a relocation error when compiling with ffmpeg and how can I fix it?

Neukompilierung mit -fPIC für Shared Library-Kompatibilität

Beim Kompilieren von Programmen mithilfe von Bibliotheken ist es wichtig, die Kompatibilität zwischen dem Bibliothekstyp und der Kompilierung sicherzustellen Flaggen. Ein solches Szenario tritt auf, wenn die ARM-Ubuntu-Maschine zur Neuinstallation von ffmpeg verwendet wird. Das Kompilieren eines Programms, das die ffmpeg-Bibliothek verwendet, kann zu folgendem Fehler führen:

/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

Dieser Fehler weist auf eine Nichtübereinstimmung zwischen dem Bibliothekstyp und den Kompilierungsflags hin. Das Flag -fPIC wird normalerweise beim Kompilieren von Code verwendet, der in eine gemeinsam genutzte Bibliothek (.so) aufgenommen wird. Standardmäßig wird ffmpeg jedoch häufig in eine statische Bibliothek (.a) kompiliert.

Um dieses Problem zu beheben, müssen Sie ffmpeg mit dem Flag -fPIC neu kompilieren. Dies kann durch Ändern der Kompilierungsoptionen bei der Konfiguration von ffmpeg erreicht werden. Fügen Sie dazu „--enable-shared“ zu den ./configure-Optionen hinzu. Alternativ können Sie gemeinsam genutzte Bibliotheken vollständig deaktivieren, indem Sie stattdessen „--disable-shared“ hinzufügen.

Sobald diese Änderung vorgenommen wurde, erzeugt die Neukompilierung von ffmpeg eine gemeinsam genutzte Bibliothek (.so) anstelle einer statischen Bibliothek (.a). ). Wenn Sie Ihr Programm kompilieren, das die ffmpeg-Bibliothek verwendet, kann es erfolgreich mit der gemeinsam genutzten Bibliothek verknüpft werden, wodurch der Verschiebungsfehler behoben wird.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich beim Kompilieren mit ffmpeg einen Verschiebungsfehler und wie kann ich ihn beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn