Boost-Thread-MT-Bibliothek kann nicht gefunden werden

8

Ich kompiliere ein Programm, das eine Boost-Thread-MT-Bibliothek benötigt. Ich habe libboost-all-dev mit installiert, sudo apt-get install libboost-all-devaber der Compiler sagt, dass er die Boost-Thread-MT-Bibliothek nicht finden kann. Ist diese Bibliothek in einem anderen Paket? Bitte führen Sie mich, was ich dafür installieren muss.

Muhammad Omer
quelle
Hast du libboost-thread-devinstalliert?
Cornelius
-mtDas Hauptpaket Boost enthält keine Bibliotheken. Siehe auch diese ungelöste Frage.
saiarcot895
Wie kann ich -mt-Bibliotheken installieren?
Muhammad Omer

Antworten:

13

Das -mtSuffix wurde entfernt. Die installierten Boost-Bibliotheken sind Multithreading-sicher.

Sie können Ihr Programm versus kompilieren libboost-thread. Entweder durch Ändern der Quelle, um Nicht- -mtBibliotheken zu verwenden, oder durch Herstellen symbolischer Links libboost_thread.alibboost_thread-mt.a. Gleiches gilt, wenn Sie gemeinsam genutzte Bibliotheken benötigen .so.

user.dz
quelle
2
Also ... irgendwelche Ratschläge zur plattformübergreifenden Entwicklung, da Ubuntu in seiner Weisheit beschlossen hat, die Dinge anders zu machen als alle anderen?
Pseudonym
@ Pseudonym, wenn Sie GNU Autotools verwenden, siehe Autotconf:AC_CHECK_LIB
user.dz
1
Autoconf ist für viele Projekte übertrieben, insbesondere wenn Sie Boost.Build verwenden.
Pseudonym
@ Pseudonym, ich bin nicht so vertraut mit Boost, aber es check-target-builds scheint die gleiche Funktionalität von Autoconf für boost.build zu bieten.
user.dz
0

Wenn Ihr Projekt verwendet CMake, muss der folgende Schalter im FindBoost- Modul deaktiviert werden:-DBoost_USE_MULTITHREADED=OFF

Yves Martin
quelle
0

Dieser Link bezieht sich auf diese Frage.

Sie können auch versuchen, Boost aus dem Quellcode zu kompilieren, anstatt die apt-get-Version zu verwenden.

Die Argumente --layout, threadingund build-typewird dazu beitragen.

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

Versuchen Sie also diesen Befehl, um boost zu installieren, nachdem bootstrap.sh --prefix=/path/of/yours:

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

Dann erhalten Sie alle -mtBibliotheken.

Scott Yang
quelle