Nie można znaleźć biblioteki boost-thread-mt

8

Kompiluję program, który wymaga biblioteki boost-thread-mt. Zainstalowałem libboost-all-dev, sudo apt-get install libboost-all-devale kompilator mówi, że nie może znaleźć biblioteki boost-thread-mt. Czy ta biblioteka jest w jakimś innym pakiecie? Proszę wskazać mi, co muszę w tym celu zainstalować.

Muhammad Omer
źródło
Czy masz libboost-thread-devzainstalowany?
Cornelius
W -mtgłównym pakiecie Boost nie ma bibliotek. Zobacz także to nierozwiązane pytanie.
saiarcot895
Jak mogę zainstalować biblioteki -mt?
Muhammad Omer

Odpowiedzi:

13

-mtSufiks zostały usunięte. Zainstalowane biblioteki Boost są bezpieczne dla wielu wątków.

Możesz skompilować swój program kontra libboost-thread. Albo zmieniając źródło, by używało -mtbibliotek innych niż lib, lub tworząc dowiązania symboliczne libboost_thread.alibboost_thread-mt.a. To samo, jeśli potrzebujesz wspólnych bibliotek .so.

user.dz
źródło
2
Więc ... jakaś rada na temat programowania wieloplatformowego, biorąc pod uwagę, że Ubuntu w swojej mądrości postanowił robić rzeczy inaczej niż wszyscy inni?
pseudonim
@Pseudonim, jeśli używasz autotoolów GNU, zobacz Autotconf:AC_CHECK_LIB
user.dz
1
Autoconf jest przesadą w przypadku wielu projektów, szczególnie jeśli korzystasz z Boost.Build.
Pseudonim
@Pseudonim, nie jestem tak zaznajomiony z boostem, ale check-target-builds wydaje się, że oferuje taką samą funkcjonalność jak autoconf dla boost.build.
user.dz
0

Jeśli Twój projekt używa CMake, ten wyłącznik znajdujący się w module FindBoost musi się wyłączyć:-DBoost_USE_MULTITHREADED=OFF

Yves Martin
źródło
0

Ten link jest powiązany z tym pytaniem.

Równie dobrze możesz spróbować skompilować boost ze źródła zamiast używać wersji apt-get.

Argumenty --layout, threadingi build-typepomoże.

--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.

Wypróbuj to polecenie, aby zainstalować boost po bootstrap.sh --prefix=/path/of/yours:

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

Wtedy dostaniesz wszystkie -mtbiblioteki.

Scott Yang
źródło