Heim >Backend-Entwicklung >C++ >Warum erhalte ich die Fehlermeldung „Die Verschiebung von R_ARM_MOVW_ABS_NC gegen „ein lokales Symbol' kann beim Erstellen eines gemeinsam genutzten Objekts nicht verwendet werden'?

Warum erhalte ich die Fehlermeldung „Die Verschiebung von R_ARM_MOVW_ABS_NC gegen „ein lokales Symbol' kann beim Erstellen eines gemeinsam genutzten Objekts nicht verwendet werden'?

Barbara Streisand
Barbara StreisandOriginal
2024-11-08 07:00:02797Durchsuche

Why do I get the error

Neukompilierung mit -fPIC-Flag für ARM-Ubuntu-Maschine

Beim Neuaufbau von FFmpeg auf einer ARM-Ubuntu-Maschine kann der Fehler auftreten:

relocation R_ARM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC

Dieser Fehler weist darauf hin, dass das System versucht, eine statische Bibliothek mit einer dynamischen Bibliothek zu verknüpfen, die nicht kompatibel ist. Um dieses Problem zu beheben, ist es notwendig, die problematische Bibliothek, wie z. B. FFmpeg, mit dem Flag -fPIC neu zu kompilieren.

Neukompilierungsprozess

Die folgenden Schritte können unternommen werden Kompilieren Sie eine Bibliothek mit dem Flag -fPIC neu:

  1. Bearbeiten Sie den Quellcode der Bibliothek: Suchen und öffnen Sie die Quellcodedateien für die Bibliothek, die den Verschiebungsfehler verursacht.
  2. Fügen Sie das Flag -fPIC hinzu: Fügen Sie das Flag -fPIC zu den im Quellcode angegebenen Compileroptionen hinzu. Dieses Flag weist den Compiler an, positionsunabhängigen Code (PIC) zu generieren, der für dynamisches Linken geeignet ist.
  3. Bibliothek neu kompilieren: Erstellen Sie die Bibliothek mit den aktualisierten Compileroptionen neu. Dies kann normalerweise mit dem Befehl make erfolgen.
  4. Installieren Sie die neu kompilierte Bibliothek: Sobald die Bibliothek mit PIC neu kompiliert wurde, sollte sie im Bibliotheksverzeichnis des Systems installiert werden. Dadurch wird es für die Verknüpfung mit anderen Programmen verfügbar.

Spezifisches Beispiel für FFmpeg

Für FFmpeg kann der folgende Befehl verwendet werden, um es mit dem neu zu kompilieren -fPIC-Flag:

./configure --enable-shared --disable-static
make

Durch Hinzufügen des Flags --enable-shared werden gemeinsam genutzte Bibliotheken anstelle statischer Bibliotheken generiert. Das Flag --disable-static stellt sicher, dass keine statischen Bibliotheken erstellt werden.

Nachdem FFmpeg mit diesen Optionen neu erstellt wurde, können die neu kompilierten Bibliotheken mit make install in den entsprechenden Systemverzeichnissen installiert werden. Dadurch werden die PIC-fähigen FFmpeg-Bibliotheken für die Verknüpfung und Nutzung durch andere Programme verfügbar.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich die Fehlermeldung „Die Verschiebung von R_ARM_MOVW_ABS_NC gegen „ein lokales Symbol' kann beim Erstellen eines gemeinsam genutzten Objekts nicht verwendet werden'?. 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