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

/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 больше не являются частью библиотеки - или я что-то не хватает?

Как я могу это решить?

4b9b3361

Ответ 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, все сработало.

Кажется, что некоторые пути запутались или что-то вроде этого. Надеюсь, это поможет вам или кому-то еще.