Cuando ejecuto un proceso que se vincula a una biblioteca compartida en tiempo de ejecución (vinculado cuando se inicia el proceso, no vinculado posteriormente dlload()
), ¿dónde busca ese .so
archivo de biblioteca compartida ( ) diferente LD_LIBRARY_PATH
?
Fondo:
Tengo un código C ++ que escribí que usa una biblioteca de terceros en particular. He instalado la biblioteca y he compilado mi código en dos plataformas diferentes, ambas Ubuntu pero diferentes versiones, y también diferentes versiones de gcc. La biblioteca se compiló e instaló desde el origen, y se encuentra en /usr/local/lib
ambas plataformas. Cuando compilo mi código, enlazo con los pkg-config --libs
parámetros de la biblioteca de terceros y he verificado que pkg-config --libs
devuelve exactamente lo mismo en ambas plataformas.
Mi código se compila correctamente en ambas plataformas y LD_LIBRARY_PATH
no está definido (o definido como vacío:) ""
en ambas plataformas. Sin embargo, cuando lo ejecuto en una plataforma funciona bien, y en la otra me sale este error:
error while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory
Curiosamente, la que no funciona es la versión más nueva de Ubuntu y gcc. : /
Así que estoy tratando de descubrir cómo el que trabaja puede localizar la biblioteca, de modo que pueda hacer que el roto localice la biblioteca de la misma manera. (es decir, sin configuración LD_LIBRARY_PATH
)
Actualizar:
Aquí está mi salida de cat /etc/ld.so.conf.d/*
... en el sistema de trabajo (más antiguo):
/usr/lib/mesa
/usr/lib32/mesa
/usr/lib/alsa-lib
# libc default configuration
/usr/local/lib
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
... en el sistema roto (más nuevo):
# libc default configuration
/usr/local/lib
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/mesa
/usr/local/lib/libthrift-0.9.0.so
pero aún así da el error error while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory
... ¿Hay alguna razón por la que no recogería un directorio /etc/ld.so.conf.d/*.conf
?
sudo ldconfig -v
como se sugiere a continuación. Si todavía no funciona, actualice su pregunta con la salida de ldd /path/to/your/application
.
/etc/ld.so.conf.d/*.conf
, pero no estoy seguro de eso.