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.