Heim >Backend-Entwicklung >C++ >Warum erhalte ich beim Kompilieren mit ffmpeg einen Verschiebungsfehler und wie kann ich ihn beheben?
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!