GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Umzug R_X86_64_32S gegen Verknüpfungsfehler

Angenommen, Sie generieren eine gemeinsam genutzte Bibliothek, was höchstwahrscheinlich passiert, ist, dass die Variante von liblog4cplus.a Sie verwenden, wurde nicht mit -fPIC kompiliert . Unter Linux können Sie dies bestätigen, indem Sie die Objektdateien aus der statischen Bibliothek extrahieren und ihre Verschiebungen überprüfen:

ar -x liblog4cplus.a  
readelf --relocs fileappender.o | egrep '(GOT|PLT|JU?MP_SLOT)'

Wenn die Ausgabe leer ist, ist die statische Bibliothek nicht positionsunabhängig und kann nicht zum Generieren eines gemeinsamen Objekts verwendet werden.

Da die statische Bibliothek Objektcode enthält, der bereits kompiliert wurde, hilft das Bereitstellen des Flags -fPIC nicht.

Sie müssen sich eine Version von liblog4cplus.a besorgen kompiliert mit -fPIC und verwende stattdessen diesen.


Fügen Sie -fPIC hinzu am Ende von CMAKE_CXX_FLAGS und CMAKE_C_FLAG

Beispiel:

set( CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} -Wall --std=c++11 -O3 -fPIC" )
set( CMAKE_C_FLAGS  "${CMAKE_C_FLAGS} -Wall -O3 -fPIC" )

Dies hat mein Problem gelöst.


Linux
  1. WLAN-Fehler Wpa_supplicant?

  2. Verknüpfen mit einer alten Version von libc, um eine größere Anwendungsabdeckung bereitzustellen

  3. Was bedeutet Warnung:Das Verknüpfen der gemeinsam genutzten Bibliothek mit der statischen Bibliothek ist nicht portierbar?

  4. Was ist :-!! im C-Code?

  5. Was ist eine .so.2-Datei?

libcrypto-Bibliotheksfehler kann nicht gefunden werden

Linken einer gemeinsam genutzten Bibliothek mit einer anderen gemeinsam genutzten Bibliothek unter Linux

arm-linux-gnu-gcc schwerwiegender Fehler:stdio.h:Keine solche Datei oder Verzeichnis

Fehler beim Kompilieren mit arm-none-eabi-gcc und beim Linken der Bibliothek liba.a

Verknüpfungsfehler:DSO fehlt in der Befehlszeile

Fehler beim Laden der gemeinsam genutzten Bibliothek (glew)