Estoy ejecutando ubuntu 10.04 y quiero usar tmux 1.6. tmux tiene una dependencia en libevent 2.
Mi solución fue compilar libevent2 y pasar a /usr/local/lib
luego compile tmux contra esta lib y colóquelo en /usr/local/bin
. Esto funciona muy bien hasta que… lo reinicio. Esto es solo una suposición de mi parte, pero parece que otros binarios ahora se están vinculando a la biblioteca libevent2, presumiblemente porque está en la ruta de la biblioteca. Debido a que hay más de 60 paquetes con dependencias libevent1, esto hace que mi instalación básicamente pierda la cabeza.
¿Existe una forma idiomática de abordar la ejecución de una aplicación que tiene una dependencia de biblioteca central en una versión diferente? ¿Debería vincular estáticamente la lib?
2 respuestas
http://www.ibm.com/developerworks/linux/library/l-lpic1-v3-102-3/ sugiere
Los programas binarios compilados generalmente se vinculan con /usr/lib/libXXX.so.1.2.3
Si usa una nueva versión específica, puede colocarla en /usr/lib/libXXX.so.3.4.5
y su programa recién creado debería vincularse contra esto.
En realidad, puede verificar si los programas antiguos ahora se vinculan con la nueva biblioteca al
ldd /path/to/program
.
Si esto realmente sucede, usted puede:
- poner la nueva lib en un directorio separado
/special/path/lib
y - inicie su programa especial con un script de shell contenedor, que establece
LD_LIBRARY_PATH=/special/path/lib:$LD_LIBRARY_PATH
y luego lanza el binario o - si compila su programa usted mismo, puede pasar el
LDFLAGS=-Wl,-rpath,/special/path/lib
esto codifica la ruta de búsqueda de la biblioteca especial en su programa (bueno porque funciona sin un script contenedor)