Boost linker error: Símbolo externo sin resolver “class boost :: system :: error_category const & __cdecl boost :: system :: get_system_category (void)”

Estoy empezando con Boost por primera vez, detalles:

  1. Estoy usando Visual Studio 2008 SP1
  2. Estoy haciendo una construcción x64
  3. Estoy usando boost :: asio solamente (y cualquier dependencia que tenga)

Mi código ahora se comstack, y apunté mi proyecto a las bibliotecas de impulso (después de haber construido x64 libs) y supere problemas simples, ahora estoy frente a un error de enlazador:

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) 

¿algunas ideas?


Agregué esta definición: #define BOOST_LIB_DIAGNOSTIC

Y ahora en mi salida veo esto:

 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 

lo que parece indicar que de hecho está enlazando en el sistema lib.

Resolví el problema. Construí bibliotecas de 32 bits cuando tenía la intención de construir bibliotecas de 64 bits. Arreglé mi statement de comstackción y construí bibliotecas de 64 bits, y ahora funciona.

Aquí está mi línea de comando 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  

En mi caso, BOOST_LIB_DIAGNOSTIC no mostró que el sistema se vincule automáticamente. Lo resolví simplemente incluyendo boost / system / config.hpp.

Necesita vincular en la biblioteca boost_system

Yo tuve el mismo problema. Intenté todo lo descrito anteriormente, pero nada ayuda. La solución fue simple: primero trabajé con un proyecto vacío y allí tuve un error de enlazador LNK2019. Pero cuando creé una nueva aplicación de consola Win32 predeterminada con archivos stdafx.h, targetver.h y stdafx.cpp, todo funcionó. Puede ser que sea útil para alguien, paso dos días para esto

Si usa boost :: system en su proyecto, debe usar y asignar la versión x86 o x64 de boost :: system lib.

Puede recomstackr la biblioteca Boost con el siguiente archivo por lotes. Guárdelos en la carpeta raíz de Boost y ejecútelos en CMD Windows (¡no haga doble clic!):

 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 

Para obtener más información, puede ver este artículo: https://studiofreya.com/2015/12/19/how-to-build-boost-1-60-with-visual-studio-2015/

Llegué a la pregunta mediante la búsqueda del error del vinculador más CMAKE, por lo que agrego este comentario aquí en caso de que alguien más encuentre esta pregunta de la misma manera.

Resulta que el error del enlazador en mi caso se debió a un error:

  add_definitions(-DBOOST_ALL_DYN_LINK) 

en el CMakeLists.txt , que está bien para Unix, pero no para Windows en mi caso. La solución no es el uso que define en Windows.

Necesitaba ambas versiones y utilicé el objective de etapa, así que usé –stagedir =. / StageX86 para la versión x86 y el ./stage predeterminado para x64

También vine aquí para este error de enlazador más CMake, pero en mi caso fue el hecho de que CMake intentará comstackr por defecto con 32 bits por defecto. Esto se solucionó especificando -Ax64

 cmake -Ax64 {path to CMakeLists.txt}