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.