Ошибка при загрузке общих библиотек: libboost_system.so.1.45.0: невозможно открыть файл общего объекта: нет такого файла или каталога
Вопрос
Я строю исполняемый файл 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