Ошибка при загрузке разделяемых библиотек: libboost_system.so.1.45.0: невозможно открыть файл общих объектов: нет такого файла или каталога
Я создаю исполняемый файл С++ в Linux. Исполняемые ссылки в некоторые библиотеки boost.
Это результат, когда я пытаюсь запустить двоичный файл:
[email protected]:~/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 в двоичном файле, чтобы проверить зависимости:
[email protected]:~/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 SO не найден. Я построил его успешно немного раньше на сегодня. Может кто-нибудь объяснить?
Ответы
Ответ 1
Библиотека не найдена.
Библиотеки по умолчанию ищут в /lib
, /usr/lib
и каталоги, указанные в /etc/ld.so.conf
.
Обычно системные библиотеки (например, boost, если вы установили его через диспетчер пакетов) расположены в /usr/lib
, но это, вероятно, не ваш случай.
Где ваши библиотеки ускорения, расположенные в вашей системе? Вы скомпилировали их самостоятельно? В этом случае вы должны указать динамическому компоновщику искать ваши библиотеки в каталоге, в котором они расположены, используя переменную среды LD_LIBRARY_PATH
:
LD_LIBRARY_PATH="your/boost/directory" ./testfgci
Я бы предложил вам установить библиотеки boost, используя ваш диспетчер пакетов, так или иначе, это сделает вашу жизнь намного проще.
Ответ 2
Я знаю, что это старый, но вы можете запустить ldconfig
, чтобы перестроить ваш ld-кеш. Таким образом вам не нужно обновлять LD_LIBRARY_PATH
.
Ответ 3
Я просто хотел добавить примечание для пользователей 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
от, например, emacs
или eclipse
,
он не будет работать, если вы не запустили emacs
из оболочки, а не из запуска.
Это то, что сработало для меня:
echo -e "\n/usr/local/boost_1_54_0/stage/lib" | sudo tee -a /etc/ld.so.conf
sudo ldconfig