Подтвердить что ты не робот

Ошибка при загрузке разделяемых библиотек: 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 не найден. Я построил его успешно немного раньше на сегодня. Может кто-нибудь объяснить?

4b9b3361

Ответ 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