GNU/Linux >> Tutoriales Linux >  >> Linux

reubicación R_X86_64_32S contra error de enlace

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.


Linux
  1. ¿Error wifi Wpa_supplicant?

  2. Vinculación de la biblioteca de 32 bits al programa de 64 bits

  3. ¿Cuál es el significado de Advertencia:vincular la biblioteca compartida con la biblioteca estática no es portátil?

  4. Que es :-!! en código C?

  5. error de configuración:no se pudo vincular contra boost_system

arm-linux-gnu-gcc error fatal:stdio.h:No existe tal archivo o directorio

Compilar usando arm-none-eabi-gcc y vincular la biblioteca liba.a error

Error de vinculación:falta DSO en la línea de comando

Error al cargar la biblioteca compartida (glow)

¿Qué es un archivo .so?

Error al instalar extundelete-0.2.0 en CentOS 5.6, error:no se puede encontrar la biblioteca ext2fs