Za předpokladu, že generujete sdílenou knihovnu, s největší pravděpodobností se stane, že varianta liblog4cplus.a
který používáte, nebyl zkompilován s -fPIC
. V linuxu to můžete potvrdit extrahováním souborů objektů ze statické knihovny a kontrolou jejich přemístění:
ar -x liblog4cplus.a
readelf --relocs fileappender.o | egrep '(GOT|PLT|JU?MP_SLOT)'
Pokud je výstup prázdný, pak statická knihovna není nezávislá na pozici a nelze ji použít ke generování sdíleného objektu.
Protože statická knihovna obsahuje objektový kód, který již byl zkompilován, nepomůže poskytnutí parametru -fPIC.
Potřebujete získat verzi liblog4cplus.a
kompilováno s -fPIC
a místo toho použijte ten.
Přidejte -fPIC
na konci CMAKE_CXX_FLAGS
a CMAKE_C_FLAG
Příklad:
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall --std=c++11 -O3 -fPIC" )
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O3 -fPIC" )
Toto vyřešilo můj problém.
Jak přidat svůj vlastní software do balíčku Buildroot Linux?
gcc - chyba /usr/bin/ld:nelze najít <knihovnu> v /usr/local/lib, přestože ji ldconfig uvádí a cesta byla přidána do ld.so.conf