Estoy instalando un programa en un servidor como usuario no root. Específicamente, es tmux 1.5, pero en mi opinión, esto debería aplicarse ampliamente a todos los programas instalados localmente (menciono el nombre del programa en caso de que este problema no sea mi propio error).
El programa requiere que instale algunas bibliotecas dependientes (por ejemplo, libevent y ncurses). Entonces, los instalé localmente ya que no tengo acceso de root
cd $HOME/library/installation/folder
DIR=$HOME/local
./configure --prefix=$DIR
#... make ... make install
Ahora, para instalar el programa, también tuve que incluir los paquetes de la biblioteca:
cd $HOME/program/installation/folder
./configure --prefix=$DIR CFLAGS="-I$DIR/include" LDFLAGS="-L$DIR/lib"
#... make ... make install
Ok, esto instala el programa sin problemas en $ HOME / local / bin, pero si ejecuto el ejecutable: $ HOME / local / bin / tmux, aparece el siguiente error:
tmux: error al cargar las bibliotecas compartidas: libevent-2.0.so.5: no se puede abrir el archivo de objeto compartido: No existe tal archivo o directorio
Me parece que el programa no puede encontrar las bibliotecas deseadas, pero el archivo libevent-2.0.so.5 sí existe en $ HOME / local / lib como se especifica en las opciones de configuración. Me pregunto cómo puedo hacer que el programa reconozca la biblioteca instalada para que se ejecute. Intenté poner enlaces simbólicos en $ HOME / lib, $ HOME / bin y $ HOME / local / bin, pero ninguno de estos funcionó. Cualquier idea y sugerencia sería muy apreciada.
fuente
-R $DIR/lib
queCFLAGS
es mientras se construyetmux
(y nolibevent
). Esto no me ayudó: hubo un error final de gcc que decía que no podía reconocer-R
(también, intenté sin el espacio entre-R
y$DIR
). ./configure --disable-shared Esto funcionó, actualizando elLD_LIBRARY_PATH
también funcionó. Terminé haciendo delibevent
nuevo con la--disable-shared
opción anterior .Respuestas:
Intenta reconstruir libevent usando
Sospecho que esto solucionará su problema porque la biblioteca se vinculará al compilar el binario y no necesita buscarse en tiempo de ejecución.
Alternativamente, si necesita un libevent vinculado dinámicamente, puede agregar el directorio que contiene libevent-2.0.so.5 a su variable de entorno LD_LIBRARY_PATH:
fuente
También puede configurar el RPATH, que codifica el parche de búsqueda de la biblioteca en el propio binario .
Solo agregue
-R $DIR/lib
aCFLAGS
.fuente
No tuve suerte con los demás, pero esto funcionó para mí, desde aquí :
fuente
He hecho una pregunta similar , curiosamente también sobre la construcción
tmux
de todas las cosas (aunque todavía estoy seguro de que esto se refiere a casi cualquier situación en la que GNUconfigure
ymake
se usan juntos.Creo que un enfoque más limpio es utilizar el llamado "rpath", la ruta de búsqueda de la biblioteca incrustada en el binario. El
-rpath
interruptor de al menos GNU linkerld
especifica la ruta.La línea de comando de compilación se vería así:
No es realmente primordial aquí, pero lo
PKG_CONFIG_PATH
anterior es simplemente la forma recomendada de hacer lo que la gente lograría enviar manualmente-L/path/to/libevent/lib -I/path/to/libevent/include
al./configure
script. Cuando compilalibevent
, instala sus propios archivos de configuración parapkg-config
(que es utilizado por./configure
). Debería usarlo, porque sololibevent
definitivamente sabe qué interruptores deben usarse al construir contra él.De todos modos, en algunas situaciones,
-rpath
es un enfoque más limpio para resolver el problema.LD_LIBRARY_PATH
Sin embargo, las soluciones basadas en la tecnología le permiten hacer malabarismos con la biblioteca utilizada por su binario integrado en tiempo de ejecución, lo que a veces es deseable. Pero si solo desea construir contra una biblioteca en particular que haya colocado en un lugar dedicado en su carpeta de inicio en algún lugar, creo que las-rpath
soluciones basadas en el uso deben considerarse como una respuesta canónica.Lo extraño es por qué
tmux
los propios scripts de compilación no infieren esta ruta desde la ruta de búsqueda de la biblioteca durante la construcción. Tal vez no necesitan y no deberían, no lo sé. ¿Es una coincidencia que nos haya sucedido a nosotros que construimostmux
?fuente