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 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 sobre 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, solo las bibliotecas estáticas 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 recuperar. 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 quitar un --disable-shared
fuera de lugar cambiar en el configure
invocación para el programa requerido, ya que las bibliotecas compartidas y estáticas se crearon de forma predeterminada.
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 ...