Suponiendo que está generando una biblioteca compartida, lo más probable es que la variante de liblog4cplus.a
que está utilizando no se compiló con -fPIC
. En Linux, puede confirmar esto extrayendo los archivos de objeto de la biblioteca estática y verificando sus reubicaciones:
ar -x liblog4cplus.a
readelf --relocs fileappender.o | egrep '(GOT|PLT|JU?MP_SLOT)'
Si la salida está vacía, la biblioteca estática no es independiente de la posición y no se puede usar para generar un objeto compartido.
Dado que la biblioteca estática contiene código objeto que ya se compiló, proporcionar el indicador -fPIC no ayudará.
Necesita obtener una versión de liblog4cplus.a
compilado con -fPIC
y usa ese en su lugar.
Agregar -fPIC
al final de CMAKE_CXX_FLAGS
y CMAKE_C_FLAG
Ejemplo:
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall --std=c++11 -O3 -fPIC" )
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O3 -fPIC" )
Esto resolvió mi problema.