Necesito construir dos bibliotecas compartidas de terceros, por lo que sus archivos .so serán reutilizados por otros proyectos. Sin embargo, después de la compilación, una de estas bibliotecas contiene una ruta de acceso codificada a otra. Esta ruta no es válida en otras máquinas y causa advertencias del enlazador. ¿Cómo puedo evitar que la ruta completa se incruste en los archivos .so resultantes?¿Cómo construir una biblioteca compartida (.so) sin rutas de dependencia completas codificadas?
Detalles:
primera fuente de biblioteca: ~/dev/A
segunda fuente de biblioteca: ~/dev/B
Ambos tienen configure
script para generar hacer que los archivos. La biblioteca B
depende de A
. Así, en primer construyo A
:
$ ~/dev/A/configure --prefix=~/dev/A-install
$ make && make install
Entonces construir B
:
$ ~/dev/B/configure --prefix=~/dev/B-install --with-A=~/dev/A-install
$ make && make install
entonces quiero cargar el contenido de ~/dev/A-install
y ~/dev/B-install
a nuestro servidor de archivos, por lo que otros equipos y construir máquinas se pueden utilizar los binarios Pero consiguen advertencias de vinculador cuando tratan de utilizar B
:
/usr/bin/ld: warning: libA.so.2, needed by /.../deps/B/lib/libB.so, not found (try using -rpath or -rpath-link)
Cuando corro ldd libB.so
Da:
...
libA.so.2 => /home/alex/dev/A-install/lib/libA.so.2
Obviamente existe esta ruta sólo en mi máquina y no se puede encontrar en otras máquinas.
¿Cómo puedo eliminar el camino completo codificado desde libB.so
?
Gracias.
¿Cómo se vincula? Con libtool? En ese caso, 'patchelf' podría ayudarlo a deshacerse de la ruta codificada (el RPATH). –
¿Por qué no usar un prefijo que no depende de su entorno, es decir '~'? ¿Por qué no usar algo como say '/ opt' como prefijo que no depende de la variable de entorno como' $ HOME' ('~')? Puede intentar ['LD_PRELOAD'] (http://stackoverflow.com/questions/426230/what-is-the-ld-preload-trick) –
Idealmente, podría cambiar el script' configure' para evitar este problema. Si desea editar las bibliotecas, he oído cosas buenas sobre elfsh (http://www.eresi-project.org). – Beta