aparece el error "recompilar con -fPIC"

aparece el error "recompilar con -fPIC"

Después ./configuredel asterisco en CentOS, escribo el comando make pero aparece el siguiente error

/usr/bin/ld: /usr/local/lib/liblua.a(lapi.o): relocation R_X86_64_32 against `luaO_nilobject_' can not be used when making a shared object; recompile with -fPIC /usr/local/lib/liblua.a: could not read symbols: Bad value

Intenté esto ./configure CFLAGS=-fPICpero obtuve el mismo error que el anterior.

Respuesta1

En este punto del asterisco, estás intentando crear una biblioteca dinámica. Dado que esta biblioteca dinámica se puede cargar en cualquier ubicación de memoria, todo debe ser reubicable. La -fPICbandera significa Código independiente de posición, el código está diseñado para ser independiente de la ubicación de la carga: cargado en cualquier lugar.

Como parte de esta compilación de biblioteca dinámica de asterisco, se está intentando incorporar el intérprete de Lua. Dado que se está incorporando a una biblioteca dinámica, necesita todo el PIC compilado. Pero estás usando una biblioteca estática de lua, que eranoconstruido con -fPIC. Rechaza esto, ya que los objetos lua en la biblioteca estática no se pueden reubicar.

POR CIERTO:Es por eso que agregar -fPICa la compilación de asterisco no ayudará. No son los objetos de su código de asterisco los que son incompatibles (a los que -fPIC puede afectar), sino liblua.a, específicamente los objetos que lleva liblua.a (por ejemplo, lapi.o). Además, en ese momento estás creando una biblioteca dinámica y estoy seguro de que ya tienes indicadores de código reubicables como -fPIC para los objetos de asterisco que estás intentando reunir en ese momento.

Veo tres soluciones.

  • Una es eliminar lua de tu compilación. Si no lo necesita específicamente y está pensando más en que "puede ser divertido jugar con esto más adelante", es posible que pueda hacerlo y no perder las funciones deseadas.

  • Otra es obtener una versión dinámica de liblua, liblua.souna a la que se pueda hacer referencia en su compilación de asterisco. No conozco tu distribución, así que no puedo decir cómo conseguirla.

  • El otro, más doloroso, es reconstruir lua y liblua.a con -fPIC. Tendría problemas de compatibilidad, tal vez debido a indicadores de compilación inconsistentes (lo que creó y qué más hay en el disco), por lo que creo que encontrar un liblua.so que coincida con su lua actualmente creado es la mejor opción.

Si encuentra liblua.so, es posible que desee consultar el indicador del vinculador '-rpath' para esto, específicamente '-Wl,-rpath,/path/to/lua/libs'.

información relacionada