/usr/bin/ld: не удается найти -lboost_system-mt
Недавно я обновился от boost 1.40 до 1.45, полностью удалив предыдущий каталог boost, загрузив источники 1.45 и восстановив нужные библиотеки. Затем я установил libs с помощью установки bjam.
На моей машине ничего не изменилось, но теперь, когда я создаю свою программу на С++, я получаю следующую ошибку ссылки:
/usr/bin/ld: cannot find -lboost_system-mt
Я искал и файл действительно не существует. Кажется, библиотеки mt больше не являются частью библиотеки - или я что-то не хватает?
Как я могу это решить?
Ответы
Ответ 1
Ну, я решил эту ошибку на ubuntu 12.04 (x86_64) с помощью старого старого подхода с использованием рассеяния
Установка openvrml с ошибкой "не может найти -lboost_filesystem-mt" после make.
libboost-все-DEV. устанавливает 54 различных пакета. Один из них, должно быть, сделал трюк, отлично работает.
Ответ 2
Эта версия, вероятно, не позволяет включить многопоточность по умолчанию.
Попробуйте пропустить -lboost_system
вместо -lboost_system-mt
Edit:
Также хорошо проверить, действительно ли новые библиотеки находятся внутри /usr/local/lib
. Вы должны искать /usr/local/lib/libboost_system.so, поскольку вы не запрашивали создание библиотек с помощью многопоточности. Если файл присутствует, то $PATH (переменная среды) может отсутствовать /usr/local/lib
, и вы должны обновить команду компиляции, чтобы компилятор знал, где их найти:
-L/usr/local/lib -lboost_system-mt
Ответ 3
Вы уверены, что символьная ссылка /usr/lib/libboost_system-mt.so
указывает на правильный файл:
$ realpath /usr/lib/libboost_system-mt.so
В противном случае вам необходимо установить проект или использовать управление вашим дистрибутивом. Для Debian/Ubuntu это будет apt-get install libboost-system1.45-dev
- но этот пакет не существует при написании этого файла.
Ответ 4
У меня дерзкий:
$ dpkg -S /usr/lib/libboost_system-mt.so
libboost-system1.49-dev: /usr/lib/libboost_system-mt.so
таким образом, вы можете сделать:
sudo apt-get install libboost-system1.49-dev
Ответ 5
Исправлено это благодаря @KilgoreTrout и @user3191035, поэтому здесь мои заметки: я нахожусь Ubuntu Natty 11.04; мое обычное состояние:
$ dpkg -S libboost_filesystem
libboost-filesystem1.42.0: /usr/lib/libboost_filesystem.so.1.42.0
Затем я установил:
sudo apt-get install libboost-all-dev # ton of packages
... и после этого я получаю следующее:
$ dpkg -S libboost_filesystem
libboost-filesystem1.42-dev: /usr/lib/libboost_filesystem-mt.a
libboost-filesystem1.42.0: /usr/lib/libboost_filesystem.so.1.42.0
libboost-filesystem1.42-dev: /usr/lib/libboost_filesystem.so
libboost-filesystem1.42-dev: /usr/lib/libboost_filesystem-mt.so
libboost-filesystem1.42-dev: /usr/lib/libboost_filesystem.a
Итак, вот где libboost_filesystem-mt.so
находится в этой ОС...
Ответ 6
измените libboost_thread-mt на libboost_thread, сначала найдите адрес libboost_thread.so и libboost_thread.a, затем создайте программные ссылки на эти файлы по одному адресу, поэтому он должен быть
ln -s /...libboostSourceFiles.../libboost_thread.so /..RequestTOmtFiles.../libboost_thread-mt.so
он работает и для других файлов libboost -mt, например, для сериализации, iostreams, programoptions
Ответ 7
У меня также была странная встреча с этим. Мое решение было нечетным, но поскольку это сработало для меня, и я не читал об этом нигде, вот оно.
В моем случае lboost_python3 отсутствовал.
Следовательно, я загрузил все 54 пакета, такие как @Kilgore Trout, предлагаемые
sudo apt-get install libboost-all-dev
К сожалению, когда я смотрел в папку /usr/lib, там были доступны только определенные пакеты. Однако, когда я искал папку /usr/lib, у меня появилось больше результатов - отсутствующие файлы были в папке /usr/lib/arm -linux-gnueabihf.
Я просто скопировал все файлы, связанные с libboost, в папку /usr/lib -folder et voila - в следующий раз, когда я попытался построить что-либо с помощью lboost_python3.so, все сработало.
Кажется, что некоторые пути запутались или что-то вроде этого.
Надеюсь, это поможет вам или кому-то еще.