Ошибка при загрузке общих библиотек: libboost_system.so.1.45.0: невозможно открыть файл общего объекта: нет такого файла или каталога

StackOverflow https://stackoverflow.com/questions/4581305

  •  14-10-2019
  •  | 
  •  

Вопрос

Я строю исполняемый файл C ++ на Linux. Исполняемые ссылки в некоторые библиотеки Boost.

Это выход, когда я пытаюсь запустить бинар:

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

Затем я запускаю LDD на бинарном виде, чтобы проверить зависимости:

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)

Я не уверен, почему liboos_system.sl.1.45.0 Так не найден. Я успешно построил его немного раньше. Кто -нибудь может объяснить?

Это было полезно?

Решение

Библиотека не может быть найдена.

Библиотеки по умолчанию искали в /lib, /usr/lib и каталоги, указанные /etc/ld.so.conf.

Обычно системные библиотеки (например, Boost, если вы установили его через диспетчер пакетов) расположены в /usr/lib, но это, вероятно, не ваш случай.

Где ваши библиотеки Boost расположены в вашей системе? Вы скомпилировали их самостоятельно? В этом случае вы должны сообщить динамическому линкеру, чтобы найти ваши библиотеки в каталоге, который они находятся, используя, используя LD_LIBRARY_PATH переменная среды:

LD_LIBRARY_PATH="your/boost/directory" ./testfgci

Я бы посоветовал вам установить библиотеки Boost, используя ваш менеджер пакетов, в любом случае, это сделает вашу жизнь намного проще.

Другие советы

Я знаю, что это старый, но вы можете бежать ldconfig Чтобы восстановить свой кеш LD. Таким образом, вам не нужно обновлять LD_LIBRARY_PATH.

Я просто хотел добавить записку для пользователей Ubuntu (и Debian, я думаю): эти системы имеют функцию «безопасности», которая стирает LD_LIBRARY_PATHАнкет Это не работает:

В любом /etc/environemnt или же ~/.profile или же ~/.bash_profile:

export LD_LIBRARY_PATH=/usr/local/boost_1_54_0/stage/lib:$LD_LIBRARY_PATH

Это будет работать на ~/.bashrc, но путь будет установлен только для этой конкретной интерактивной оболочки. Это означает, что если вы вызваете make от Eg emacs или же eclipse, это не сработает, если вы не запустили emacs от оболочки, а не от пусковой установки.

Это то, что сработало для меня:

echo -e "\n/usr/local/boost_1_54_0/stage/lib" | sudo tee -a /etc/ld.so.conf 
sudo ldconfig
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top