GNU/Linux >> Linux Esercitazione >  >> Linux

riposizionamento R_X86_64_32S contro errore di collegamento

Supponendo che tu stia generando una libreria condivisa, molto probabilmente ciò che accade è che la variante di liblog4cplus.a che stai usando non è stato compilato con -fPIC . In Linux, puoi confermarlo estraendo i file oggetto dalla libreria statica e controllando le loro rilocazioni:

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

Se l'output è vuoto, la libreria statica non è indipendente dalla posizione e non può essere utilizzata per generare un oggetto condiviso.

Poiché la libreria statica contiene codice oggetto che è già stato compilato, fornire il flag -fPIC non aiuta.

Devi procurarti una versione di liblog4cplus.a compilato con -fPIC e usa quello invece.


Aggiungi -fPIC alla fine di CMAKE_CXX_FLAGS e CMAKE_C_FLAG

Esempio:

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

Questo ha risolto il mio problema.


Linux
  1. Gestione degli errori negli script Bash

  2. Debian – Errore di trasferimento utilizzando Sudo Apt?

  3. Collegamento della libreria a 32 bit al programma a 64 bit

  4. Qual è il significato di Avvertenza:il collegamento della libreria condivisa alla libreria statica non è portabile?

  5. Cos'è :-!! in codice C?

Collegamento alla versione precedente del simbolo in un file .so

Collegamento di una libreria condivisa con un'altra libreria condivisa in Linux

arm-linux-gnu-gcc errore fatale:stdio.h:file o directory non presenti

Compilazione utilizzando arm-none-eabi-gcc e collegamento alla libreria liba.a errore

Errore di collegamento:DSO mancante dalla riga di comando

Errore durante il caricamento della libreria condivisa (glew)