Ir al contenido
Conéctate para seguir esto  
Shiba87

[Solución] Relocation R_X86_64_32 against `Xidentity' can not be used when making a shared object; recompile with -fPIC

Recommended Posts

Hace unos días, en uno de eso brotes psicóticos que tengo, decidí hacer borrón y cuenta nueva y compilar Enlightenment 0.19 desde cero, ya que hasta ahora venía arrastrando librerías desde la época de e17.

 

 

Uno de los requisitos indispensables del nuevo núcleo de E19, que ahora incluye el motor de composición y otras muchas cosas, es la necesidad de contar con librerías para simulación de físicas en tiempo real, que en este caso se consigue  con Bullet

 

Pero, al compilar EFL 1.9 por un lado y la última versión de Bullet por otro, acabamos con un error que nos tira todo abajo.

 

 

 

  CXX      lib/ephysics/lib_ephysics_libephysics_la-ephysics_camera.lo
  CXX      lib/ephysics/lib_ephysics_libephysics_la-ephysics_constraints.lo
  CXX      lib/ephysics/lib_ephysics_libephysics_la-ephysics_main.lo
  CXX      lib/ephysics/lib_ephysics_libephysics_la-ephysics_quaternion.lo
  CXX      lib/ephysics/lib_ephysics_libephysics_la-ephysics_shape.lo
  CXX      lib/ephysics/lib_ephysics_libephysics_la-ephysics_world.lo
  CXXLD    lib/ephysics/libephysics.la
 

/usr/bin/ld: /usr/local/lib/libBulletSoftBody.a(btSoftBody.o): relocation R_X86_64_32 against `_ZGVZNK10btSoftBody4Body5xformEvE8identity' can not be used when making a shared object; recompile with -fPIC

/usr/local/lib/libBulletSoftBody.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
make[4]: *** [lib/ephysics/libephysics.la] Error 1
make[3]: *** [all-recursive] Error 1
make[2]: *** [all] Error 2
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2


 

¿Qué ocurre?

 

PIC es la abreviatura de Position-Independent Code.

 

 

En informática, el código independiente de la posición (PIC) o ejecutable independiente de la posición (PIE) es código objeto que se puede ejecutar en diferentes localizaciones de la memoria. Algo común cuando se trata de librerías compartidas, de forma que el mismo código puede ser mapeado a una ubicación para cada aplicación sin solapar otras librerías compartidas o la propia aplicación.

 

El código independiente de la posición puede ser copiado a cualquier localización de memoria sin modificarlo y ejecutarlo, a diferencia del código relocalizable, que necesita un procesamiento especial por un editor de enlaces o un cargador de programas para prepararlo para la ejecución en una localización determinada. Generalmente, se debe escribir o compilar el código de forma especial para que sea independiente de la posición. Instrucciones que hacen referencia a direcciones de memoria específicas, como por ejemplo ramas absolutas, se deben cambiar por instrucciones equivalentes relativas. La redirección extra puede causar que el código PIC sea menos eficiente aunque los procesadores modernos están diseñados para aliviar esto

 

En ciertas arquitecturas (AMD64 entre ellas), las librerías compartidas deben ser "habilitadas para PIC".

 

Bueno, pues ya tenemos una ligera idea del por qué, ahora sólo queda saber:

 

¿Cómo proceder?

 

De manera global, e insisto en lo de global, porque aunque se podría especificar junto con el resto de opciones de configuración/make, posiblemente no funcione :sweat:

Establecemos el flag -fPIC, tal como nos indica el mensaje de error

CFLAGS="-fPIC"
export CFLAGS

Ahora toca volver a configurar y compilar TODO :muro:.  En esta ocasión deberíamos obtener un resultado satisfactorio.

 

 

http://www.gentoo.org/proj/en/base/amd64/howtos/index.xml?part=1&chap=3

Compartir este post


Enlace al post
Compartir en otros sitios

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Invitado
Responder en este tema...

×   Has incluido contenido con formato.   Eliminar formato

  Sólo se permiten 75 emoticonos como máximo.

×   Tu enlace ha sido insertado automáticamente.   Deshacer y mostrar como enlace

×   Su contenido anterior ha sido restaurado.   Limpiar editor

×   No puedes pegar imágenes directamente. Súbelas a algún hosting de imágenes y pega la dirección URL

Conéctate para seguir esto  

×
×
  • Crear Nuevo...