Boost erreur de liens: symbole externe non résolu « boost class :: :: système error_category const & __cdecl boost :: système :: get_system_category (void) »

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

Question

Je viens juste de commencer avec Boost pour la première fois, les détails:

  1. J'utilise Visual Studio 2008 SP1
  2. Je fais un Build x64
  3. J'utilise boost :: asio uniquement (et toutes les dépendances qu'elle a)

Mon code compile maintenant, et je fait mon projet dans les bibliothèques Boost (après avoir construit libs x64) et a des questions simples du passé, maintenant je suis face à une erreur de liens:

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)

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 est enfait liaison dans le système lib.

Était-ce utile?

La solution

Je l'ai résolu le problème. J'avais construit des bibliothèques 32 bits quand j'avais l'intention de construire des bibliothèques 64 bits. Je fixe ma déclaration de construction, et les bibliothèques construit 64 bits, et maintenant il 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

Autres conseils

#include <boost/system/config.hpp>

Dans mon cas, BOOST_LIB_DIAGNOSTIC ne montre pas le système étant relié automatiquement. Je résolus simplement ce dont boost / système / config.hpp.

Vous devez créer un lien dans la bibliothèque de boost_system

J'ai eu le même problème. J'ai essayé tous décrits ci-dessus, mais rien n'y fait. La solution était simple: d'abord, je travaille avec un projet vide et là j'eu erreur éditeur de liens LNK2019. Mais quand je crée une nouvelle application console Win32 par défaut avec stdafx.h, les fichiers targetver.h et StdAfx.cpp tout fonctionnait. Peut être que ce sera utile pour quelqu'un, je passe deux jours pour cette

Si vous utilisez le système boost :: dans votre projet, vous devez utiliser et nommer x86 ou une version x64 de boost :: système lib.

Vous pouvez recompiler la bibliothèque Boost avec le fichier batch suivant. Sauvegarder dans le dossier racine Boost et l'exécuter dans le CMD de Windows (ne double-cliquez!):

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 de détails, vous pouvez consulter cet article: https://studiofreya.com/2015/12/19/how-to-build-boost-1-60-with-visual-studio-2015/

Je suis venu à la question par la recherche de l'erreur d'éditeur de liens, plus CMAKE, donc j'ajouter ce commentaire ici au cas où quelqu'un d'autre trouve cette question de la même manière.

Il se trouve que l'erreur de linker dans mon cas était dû à un errante:

    add_definitions(-DBOOST_ALL_DYN_LINK)

dans le CMakeLists.txt, ce qui est bien pour Unix, mais pas Windows dans mon cas. La solution est pas utilisée qui définissent sous Windows.

Je avais besoin les deux versions et cible de scène utilisé, donc je --stagedir =. / StageX86 pour la version x86 et ./stage par défaut pour x64

Je suis également venu ici de cette erreur d'éditeur de liens, plus CMake, mais dans mon cas, il était le fait que CMake par défaut va essayer de construire avec 32bit par défaut. Ceci a été corrigé en spécifiant -Ax64

cmake -Ax64 {path to CMakeLists.txt}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top