2012-09-02 16 views
14

Tengo un problema con las bibliotecas compartidas y gcc. Al principio no pude ejecutar mi programa compilado porque recibía el siguiente error: error de gcc al cargar bibliotecas compartidas.gcc: las bibliotecas vinculadas en/usr/local/lib no se encuentran, pero /etc/ld/so.conf.d/libc.conf lo enumera?

Realicé algunas búsquedas y descubrí que esto se debe a que no se puede encontrar la biblioteca compartida. Sin embargo, ya había identificado que la biblioteca compartida está en/usr/local/lib, que AFAICT es un directorio comúnmente utilizado para bibliotecas compartidas y debería funcionar desde el primer momento.

He leído que puede establecer LD_LIBRARY_PATH, que funcionó para mí. Sin embargo, no deseo configurar esto cada vez que quiero ejecutar mi programa.

Búsqueda adicional sugerida edición ld.so.conf. Cuando miré en este que tenía la siguiente:

include /etc/ld.so.conf.d/*.conf 

buscando en el directorio ld.so.conf.d me muestra una serie de archivos, incluyendo libc.conf. Dentro de este archivo es la siguiente:

/usr/local/lib 

Así que mi pregunta es, ¿por qué tengo que configurar manualmente LD_LIBRARY_PATH cuando el ld.so.conf parece utilizar la libc.conf que incluye// local/lib usr?

¿Hay algo que me falta aquí que debe configurarse primero? ¿Hay una opción en tiempo de compilación que me falta?

Debo señalar que para compilar, tuve que especificar la ruta a la biblioteca, no sé si esto es un síntoma de mi problema o comportamiento normal.

También debo tener en cuenta que esta es una preocupación para mí cuando implemente mi software en otros sistemas. Hubiera pensado que debería poder poner .so en el lugar apropiado e instalar mi programa sin meterme con ld.so.conf.

Espero que este sea el foro adecuado para esta pregunta, leo las preguntas frecuentes y creo que está bien.

Saludos.

+1

¿Ejecutas 'ldconfig' después de cada cambio de (es decir, escribir en)'/usr/local/lib'? –

+0

Pensé que ldconfig solo tenía que ejecutarse después de cambiar los archivos conf, ¿no cuando se colocaba un archivo en/usr/local/lib? – Metalskin

+1

Creo que respondí mi propia pregunta, busqué en ldconfig y parece que hay un caché que debe actualizarse. Hice un ldconfig -p y grep'd para la biblioteca y no está allí, así que parece que el problema es el caché que ldconfig administra. Gracias Basile! ¿Debo ahora responder mi propia pregunta? Otras preguntas en esta área no dejan en claro que se requiere ejecutar ldconfig cuando se agregan nuevas bibliotecas, leen que se ejecuta cuando se cambian los archivos conf. – Metalskin

Respuesta

18

Debe ejecutar ldconfig (como root) después de cada cambio de los directorios configurados a través de /etc/ld.so.conf o bajo /etc/ld.so.conf.d/, en particular, en su caso después de cada actualización en el interior /usr/local/lib (por ejemplo, después de cada adición o actualización de algunas bibliotecas compartidas allí).

Cuestiones relacionadas