En supposant que vous générez une bibliothèque partagée, ce qui se passe probablement est que la variante de liblog4cplus.a
que vous utilisez n'a pas été compilé avec -fPIC
. Sous Linux, vous pouvez le confirmer en extrayant les fichiers objets de la bibliothèque statique et en vérifiant leurs relocalisations :
ar -x liblog4cplus.a
readelf --relocs fileappender.o | egrep '(GOT|PLT|JU?MP_SLOT)'
Si la sortie est vide, la bibliothèque statique n'est pas indépendante de la position et ne peut pas être utilisée pour générer un objet partagé.
Étant donné que la bibliothèque statique contient du code objet qui a déjà été compilé, fournir l'indicateur -fPIC n'aidera pas.
Vous devez vous procurer une version de liblog4cplus.a
compilé avec -fPIC
et utilisez celui-là à la place.
Ajouter -fPIC
à la fin de CMAKE_CXX_FLAGS
et CMAKE_C_FLAG
Exemple :
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall --std=c++11 -O3 -fPIC" )
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O3 -fPIC" )
Cela a résolu mon problème.