programar librerias ejecutar correr con compilar compilador como archivo c++ linux ubuntu ld ldd

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