Не удается найти библиотеку boost-thread-mt

8

Я собираю программу, которая требует библиотеки boost-thread-mt. Я установил libboost-all-dev, используя, sudo apt-get install libboost-all-devно компилятор говорит, что он не может найти библиотеку boost-thread-mt. Эта библиотека в каком-то другом пакете? Пожалуйста, объясните мне, что мне нужно для этого установить.

Мухаммед Омер
источник
Вы libboost-thread-devустановили?
Корнелиус
В -mtосновном пакете Boost нет библиотек. Смотрите также этот нерешенный вопрос.
saiarcot895
Как я могу установить библиотеки -mt?
Мухаммед Омер

Ответы:

13

-mtСуффикс был удален. Установленные библиотеки Boost являются многопоточными.

Вы можете скомпилировать вашу программу против libboost-thread. Либо изменив источник, чтобы он использовал non -mtlibs, либо сделав символические ссылки libboost_thread.alibboost_thread-mt.a. То же самое, если вам нужны общие библиотеки .so.

user.dz
источник
2
Итак ... какой-нибудь совет по кроссплатформенной разработке, учитывая, что Ubuntu в своей мудрости решила делать вещи не так, как все?
псевдоним
@ Псевдоним, если вы используете автоинструментыAC_CHECK_LIB
user.dz
1
Autoconf является излишним для многих проектов, особенно если вы используете Boost.Build.
Псевдоним
@ Псевдоним, я не очень знаком с boost, но, check-target-builds похоже, предлагает те же функции autoconf для boost.build.
user.dz
0

Если ваш проект использует CMake, этот следующий переключатель в модуле FindBoost должен быть отключен:-DBoost_USE_MULTITHREADED=OFF

Ив Мартин
источник
0

Эта ссылка связана с этим вопросом.

Вы также можете попробовать скомпилировать boost из исходного кода, а не использовать версию apt-get.

Аргументы --layout, threadingи build-typeпоможет.

--layout=<layout>     Determines whether to choose library names
                      and header locations such that multiple
                      versions of Boost or multiple compilers can
                      be used on the same system.

                      versioned - Names of boost binaries
                      include the Boost version number, name and
                      version of the compiler and encoded build
                      properties.  Boost headers are installed in a
                      subdirectory of <HDRDIR> whose name contains
                      the Boost version number.

                      tagged -- Names of boost binaries include the
                      encoded build properties such as variant and
                      threading, but do not including compiler name
                      and version, or Boost version. This option is
                      useful if you build several variants of Boost,
                      using the same compiler.

                      system - Binaries names do not include the
                      Boost version number or the name and version
                      number of the compiler.  Boost headers are
                      installed directly into <HDRDIR>.  This option
                      is intended for system integrators who are
                      building distribution packages.

                  The default value is 'versioned' on Windows, and
                  'system' on Unix.

Итак, попробуйте эту команду для установки boost, после bootstrap.sh --prefix=/path/of/yours:

./b2 install -j16 threading=multi --layout=tagged --build-type=complete

Тогда вы получите все -mtбиблиотеки.

Скотт Ян
источник