Tengo un ejecutable vinculado de esta manera:
$ ldd a.out
libboost_system-mt.so.1.47.0 => /usr/lib64/libboost_system-mt.so.1.47.0 (0x00007f4881f56000)
libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007f4881cfb000)
libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007f4881965000)
librt.so.1 => /lib64/librt.so.1 (0x00007f488175d000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f4881540000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f4881239000)
.
.
Donde las bibliotecas libcrypto y libssl son openssl 1.0.0-fips libs. En cambio, quiero experimentar con las bibliotecas 1.0.1, por lo que las he creado en mi directorio de inicio. ¿Hay alguna manera de volver a.out
a vincular contra mis nuevas bibliotecas OpenSL sin mucho dolor? Me gustaria evitar
- Tener que volver a vincular
a.out
(porque las herramientas de compilación son enormemente complicadas) - Alterar cualquier configuración global (porque otros desarrolladores trabajan en esta máquina)
¿Es posible hacer lo que espero aquí?
Escriba un script de contenedor que establezca la
LD_LIBRARY_PATH
variable de entorno. Este es el colgante dePATH
las bibliotecas compartidas. La ruta de búsqueda del sistema siempre se busca después de los directorios listados en$LD_LIBRARY_PATH
. Consulte el manual del enlazador dinámico como referencia.O, por una vez, directamente en la línea de comando:
Alternativamente, si desea modificar el binario, intente chrpath , que le permite editar la ruta de búsqueda de la biblioteca en el ejecutable.
fuente
chrpath
. Exactamente lo que necesitaba.