c++ - librerias - error al cargar bibliotecas compartidas: libboost_system.so.1.45.0: no se puede abrir el archivo de objeto compartido: no existe tal archivo o directorio
correr c++ en linux (3)
Estoy construyendo un ejecutable de C ++ en Linux. Los enlaces ejecutables en algunas bibliotecas de impulso.
Esta es la salida cuando intento ejecutar el binario:
root@yourbox:~/work/dev/c++/projects/testfgci/dist/Debug/GNU-Linux-x86$ ./testfgci
./testfgci: error while loading shared libraries: libboost_system.so.1.45.0: cannot open shared object file: No such file or directory
Luego ejecuto ldd en el binario para verificar las dependencias:
root@yourbox:~/work/dev/c++/projects/testfgci/dist/Debug/GNU-Linux-x86$ ldd testfgci
linux-gate.so.1 => (0x00380000)
libboost_system.so.1.45.0 => not found
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00b50000)
libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0x005f6000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x0099a000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x001b3000)
libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0x00110000)
/lib/ld-linux.so.2 (0x00ea2000)
No estoy seguro de por qué no se encuentra el liboos_system.sl.1.45.0 SO. Lo construí con éxito un poco más temprano hoy. ¿Alguien puede explicar?
La biblioteca no se puede encontrar.
Las bibliotecas se buscan de forma predeterminada en /lib
, /usr/lib
y los directorios especificados por /etc/ld.so.conf
.
Por lo general, las bibliotecas del sistema (como boost, si lo instaló a través de su administrador de paquetes) están ubicadas en /usr/lib
, pero probablemente no sea su caso.
¿Dónde están sus bibliotecas de impulso ubicadas en su sistema? ¿Los compilaste solo? En este caso, debe indicar al vinculador dinámico que busque sus bibliotecas en el directorio en el que se encuentran utilizando la LD_LIBRARY_PATH
entorno LD_LIBRARY_PATH
:
LD_LIBRARY_PATH="your/boost/directory" ./testfgci
Le sugeriría que instale las bibliotecas boost utilizando su administrador de paquetes, de todos modos, esto hará que su vida sea mucho más simple.
Sé que este es uno antiguo, pero puede ejecutar ldconfig
para reconstruir su caché de ld. De esa manera no necesitas actualizar LD_LIBRARY_PATH
.
Solo quería agregar una nota para los usuarios de Ubuntu (y Debian, supongo): estos sistemas tienen una "característica" de seguridad que borra LD_LIBRARY_PATH
. Esto no funciona:
En /etc/environemnt
o ~/.profile
o ~/.bash_profile
:
export LD_LIBRARY_PATH=/usr/local/boost_1_54_0/stage/lib:$LD_LIBRARY_PATH
Funcionará para ~/.bashrc
, pero la ruta se establecerá solo para este shell interactivo en particular. Esto significa que si invoca make
desde, por ejemplo, emacs
o eclipse
, no funcionará, a menos que haya lanzado emacs
desde el shell y no desde el iniciador.
Esto es lo que funcionó para mí:
echo -e "/n/usr/local/boost_1_54_0/stage/lib" | sudo tee -a /etc/ld.so.conf
sudo ldconfig