Saltar al contenido

La compilación falla con “la reubicación R_X86_64_32 contra `.rodata.str1.8′ no se puede usar al crear un objeto compartido”

Presta atención porque en este escrito vas a encontrar el hallazgo que buscas.Este enunciado ha sido probado por nuestros especialistas para asegurar la calidad y veracidad de nuestro contenido.

Solución:

Haz lo que el compilador te dice que hagas, es decir, vuelve a compilar con -fPIC. Para saber qué hace esta bandera y por qué la necesita en este caso, consulte Opciones de generación de código del manual GCC.

En resumen, el término código independiente de la posición (PIC) se refiere al código de máquina generado que es independiente de la dirección de memoria, es decir, no hace ninguna suposición acerca de dónde se cargó en la RAM. Se supone que solo el código independiente de la posición debe incluirse en los objetos compartidos (SO), ya que deberían tener la capacidad de cambiar dinámicamente su ubicación en la RAM.

Finalmente, puedes leer sobre esto en Wikipedia también.

En mi caso este error ocurrió porque un make el comando esperaba obtener bibliotecas compartidas (*.so archivos) desde un directorio remoto indicado por un LDFLAGS Variable ambiental. En un error, sólo static bibliotecas estaban disponibles allí (*.la o *.a archivos).

Por lo tanto, mi problema no residía en el programa que estaba compilando, sino en las bibliotecas remotas que intentaba obtener. Por lo tanto, no necesitaba agregar ninguna bandera (digamos, -fPIC) a la compilación interrumpida por el error de reubicación. Más bien, volví a compilar la biblioteca remota para que los objetos compartidos estuvieran disponibles.

Básicamente, ha sido un error de archivo no encontrado disfrazado.

En mi caso tuve que sacar un extraviado --disable-shared cambiar en el configure invocación para el programa requerido, ya que compartido y static las bibliotecas se construyeron por defecto.


Me di cuenta de que la mayoría de los programas crean ambos tipos de bibliotecas al mismo tiempo, por lo que el mío es probablemente un caso de esquina. En general, puede darse el caso de que prefiera habilitar las bibliotecas compartidas, según los valores predeterminados.

Para inspeccionar su situación particular con los cambios de compilación y los valores predeterminados, leería el resumen que aparece con ./configure --help | less, normalmente en la sección Funciones opcionales. A menudo descubrí que esta lectura es más confiable que las guías de instalación que no se actualizan mientras evolucionan los programas de dependencia.

Lo arreglé con -no-pie opción en la etapa del enlazador:

g++-8 -L"/home/pedro/workspace/project/lib" -no-pie ...

Sección de Reseñas y Valoraciones

Recuerda que puedes recomendar esta crónica si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *