Je commence tout juste à utiliser Boost pour la première fois. Détails:
Mon code est maintenant compilé, et j'ai orienté mon projet vers les librairies boost (après avoir construit les librairies x64) et résolu des problèmes simples.
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)
des idées?
J'ai ajouté cette définition: #define BOOST_LIB_DIAGNOSTIC
Et maintenant, dans ma sortie, je vois ceci:
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
ce qui semble indiquer qu'il s'agit en fait de lien dans le système lib.
J'ai résolu le problème. J'avais construit des bibliothèques 32 bits alors que j'avais l'intention de construire des bibliothèques 64 bits. J'ai corrigé mon instruction de construction et construit des bibliothèques 64 bits, et maintenant cela fonctionne.
Voici ma ligne de commande bjam:
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
#include <boost/system/config.hpp>
Dans mon cas, BOOST_LIB_DIAGNOSTIC n'a pas montré que le système était automatiquement lié. J'ai résolu ce problème en incluant simplement boost/system/config.hpp.
Vous devez créer un lien dans la bibliothèque boost_system
J'ai eu le même problème. J'ai essayé tout ce qui est décrit ci-dessus, mais rien n'y fait. La solution était simple: d’abord, j’ai travaillé avec un projet vide et j’ai eu l’erreur de linker LNK2019. Mais lorsque j'ai créé une nouvelle application de console Win32 par défaut avec les fichiers stdafx.h, targetver.h et stdafx.cpp, tout a fonctionné. Peut-être que ce sera utile pour quelqu'un, je passe deux jours pour cela
Si vous utilisez boost :: system dans votre projet, vous devez utiliser et désigner la version x86 ou x64 de boost :: system lib.
Vous pouvez recompiler la bibliothèque Boost avec le fichier de commandes suivant. Enregistrez-les dans le dossier racine Boost et exécutez-le dans CMD Windows (ne double-cliquez pas sur!):
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
Pour plus d'informations, vous pouvez consulter cet article: https://studiofreya.com/2015/12/19/how-to-build-boost-1-60-with-visual-studio-2015/
Je suis également venu ici pour cette erreur de l'éditeur de liens plus CMake, mais dans mon cas, c'était le fait que CMake par défaut essaiera de construire avec 32 bits par défaut. Ceci a été corrigé en spécifiant -Ax64
cmake -Ax64 {path to CMakeLists.txt}
Je suis arrivé à la question en recherchant l'erreur de l'éditeur de liens plus CMAKE, alors j'ajoute ce commentaire ici au cas où quelqu'un d'autre trouverait cette question de la même manière.
Il s'est avéré que l'erreur de l'éditeur de liens dans mon cas était due à un errant:
add_definitions(-DBOOST_ALL_DYN_LINK)
dans le CMakeLists.txt
, ce qui convient pour Unix, mais pas Windows dans mon cas. La solution n’est pas l’utilisation qui définit sous Windows.
J'avais besoin des deux versions et de la scène utilisée. J'ai donc utilisé --stagedir =./StageX86 pour la version x86 et la valeur par défaut ./stage pour x64.