GNU/Linux >> Znalost Linux >  >> Linux

přemístění R_X86_64_32S proti propojování Chyba

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.


Linux
  1. Debian – Chyba při přemístění pomocí Sudo Apt?

  2. Propojení se starou verzí knihovny libc pro zajištění většího pokrytí aplikací

  3. Propojení se starší verzí symbolu v souboru .so

  1. chyba konfigurace:Nelze se připojit k systému boost_system

  2. Propojení sdílené knihovny s jinou sdílenou knihovnou v linuxu

  3. arm-linux-gnu-gcc fatální chyba:stdio.h:Žádný takový soubor nebo adresář

  1. Chyba kompilace pomocí arm-none-eabi-gcc a propojení knihovny liba.a

  2. Chyba propojení:na příkazovém řádku chybí DSO

  3. Jak funguje dynamické linkování, jeho použití a jak a proč byste udělali dylib