Boost-Linker-Fehler: nicht aufgelöstes externes Symbol „Klasse boost :: system :: error_category const & __cdecl boost :: system :: get_system_category (void)“

StackOverflow https://stackoverflow.com/questions/1066071

Frage

Ich bin nur mit Boost-zum ersten Mal begonnen, Details:

  1. Ich bin mit Visual Studio 2008 SP1
  2. Ich mache eine X 64 Build-
  3. Ich bin mit boost :: asio nur (und alle Abhängigkeiten hat)

Jetzt Mein Code kompiliert, und ich zeigte mein Projekt an den Boost-Bibliotheken (nach x64-Libs gebaut zu haben) und bekam Vergangenheit einfache Fragen, jetzt habe ich einen Linker-Fehler bin vor:

2>BaseWebServer.obj : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::get_system_category(void)" (?get_system_category@system@boost@@YAAEBVerror_category@12@XZ)
2>BaseWebServer.obj : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::get_generic_category(void)" (?get_generic_category@system@boost@@YAAEBVerror_category@12@XZ)

irgendwelche Ideen?


Ich habe diese definieren: #define BOOST_LIB_DIAGNOSTIC

Und jetzt in meiner Ausgabe sehe ich:

1>Linking to lib file: libboost_system-vc90-mt-1_38.lib
1>Linking to lib file: libboost_date_time-vc90-mt-1_38.lib
1>Linking to lib file: libboost_regex-vc90-mt-1_38.lib

das scheint darauf hinzudeuten es infact Verknüpfung im System lib ist.

War es hilfreich?

Lösung

ich das Problem gelöst. Ich hatte 32-Bit-Bibliotheken gebaut, als ich gedacht hatte 64-Bit-Bibliotheken zu bauen. Ich reparierte meine Build-Anweisung auf und baute 64-Bit-Bibliotheken, und jetzt funktioniert es.

Hier ist meine bjam Befehlszeile:

C:\Program Files (x86)\boost\boost_1_38>bjam --build-dir=c:\boost --build-type=complete --toolset=msvc-9.0 address-model=64 architecture=x86 --with-system

Andere Tipps

#include <boost/system/config.hpp>

In meinem Fall hätte BOOST_LIB_DIAGNOSTIC nicht zeigte System automatisch verknüpft werden. Ich beschließen dies durch einfache einschließlich boost / System / config.hpp.

Sie müssen in der boost_system Bibliothek verknüpfen

Ich hatte das gleiche Problem. Ich habe versucht, alle oben beschriebenen, aber nichts hilft. Die Lösung war einfach: ich zuerst mit einem leeren Projekt gearbeitet und dort hatte ich Linkerfehler LNK2019. Aber wenn ich neue Standard-Win32-Konsole-Anwendung erstellt mit stdafx.h, targetver.h und stdafx.cpp Dateien alles funktionierte. sein kann es für jemanden nützlich sein wird, ich verbringen 2 Tage für diese

Wenn Sie verwenden boost :: System in Ihrem Projekt, sollten Sie die x86 oder x64-Version von boost :: System lib.

und benennen

Sie können mit der folgenden Batch-Datei Boost-Bibliothek neu kompilieren. Speichern Sie diese an den Boost-Stammordner und führen Sie es in CMD Fenster (klicken Sie nicht doppelt!):

call "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" x86


cd boost_1_60_0
call bootstrap.bat

rem Most libraries can be static libraries
b2 -j8 toolset=msvc-14.0 address-model=64 architecture=x86 link=static threading=multi runtime-link=shared --build-type=minimal stage --stagedir=stage/x64
b2 -j8 toolset=msvc-14.0 address-model=32 architecture=x86 link=static threading=multi runtime-link=shared --build-type=minimal stage --stagedir=stage/win32

pause

Für weitere Informationen können Sie diesen Artikel finden Sie unter: https://studiofreya.com/2015/12/19/how-to-build-boost-1-60-with-visual-studio-2015/

kam ich auf die Frage über die Suche nach dem Linker Fehler plus CMAKE, so dass ich das Hinzufügen dieses Kommentars hier, falls jemand anderes findet diese Frage die gleiche Weise.

Es stellt sich heraus, dass der Linker Fehler in meinem Fall zu einem verirrten zurückzuführen war:

    add_definitions(-DBOOST_ALL_DYN_LINK)

in dem CMakeLists.txt, die für Unix in Ordnung ist, aber nicht mit Windows in meinem Fall. Die Lösung wird nicht verwenden, die unter Windows definieren.

Ich brauchte beiden Versionen und verwenden Etappenziel, so habe ich --stagedir =. / StageX86 für x86-Version und die Standard-./stage für x64

Ich kam auch hier aus für diese Linker Fehler plus CMake, aber in meinem Fall war es die Tatsache, dass CMake standardmäßig versuchen, mit 32-Bit standardmäßig zu bauen. Dies wurde behoben durch -Ax64 Angabe

cmake -Ax64 {path to CMakeLists.txt}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top