erro impulso vinculador: símbolo externo não resolvido “boost class :: Sistema :: error_category const & __cdecl boost :: Sistema :: get_system_category (void)”

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

Pergunta

Eu estou apenas começando com impulso, pela primeira vez, os detalhes:

  1. Estou usando o Visual Studio 2008 SP1
  2. Eu estou fazendo uma compilação x64
  3. Eu estou usando boost :: asio única (e quaisquer dependências que tem)

Meu código agora compila, e eu apontei meu projeto nas bibliotecas de impulso (depois de ter construído libs x64) e tem questões simples do passado, agora eu estou enfrentando um erro de vinculador:

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)

todas as idéias?


I adicionado este definir: #define BOOST_LIB_DIAGNOSTIC

E agora na minha saída eu vejo isso:

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

o que parece indicar que é ligação de facto na lib sistema.

Foi útil?

Solução

Eu resolvi o problema. I tinha construído bibliotecas de 32 bits quando tinha pretendido para construir bibliotecas de 64 bits. Fixei a minha declaração de construção, e construiu bibliotecas de 64 bits, e agora ele funciona.

Aqui é a minha linha 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

Outras dicas

#include <boost/system/config.hpp>

No meu caso, BOOST_LIB_DIAGNOSTIC não mostraram sistema que está sendo ligadas automaticamente. Eu resolvido isso simplesmente incluindo boost / system / config.hpp.

Você precisa link na biblioteca boost_system

Eu tive o mesmo problema. Eu tentei tudo descrito acima, mas nada ajuda. A solução era simples: primeiro eu trabalhei com um projeto vazio e lá eu tinha LNK2019 erro de vinculador. Mas quando eu criei novo padrão aplicação de consola Win32 com stdafx.h, targetver.h e arquivos StdAfx.cpp tudo funcionou. Pode ser que seja útil para alguém, eu passar dois dias para este

Se você usar boost :: sistema em seu projeto, você deve usar e nomear a versão x86 ou x64 de lib boost :: sistema.

Você pode recompilar biblioteca de impulso com o seguinte arquivo em lotes. Salvar-los para a pasta impulso raiz e executá-lo em CMD do Windows (não clique duas vezes!):

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 mais detalhes, você pode ver neste artigo: https://studiofreya.com/2015/12/19/how-to-build-boost-1-60-with-visual-studio-2015/

Eu vim para a questão via procurando o erro de vinculador mais CMAKE, então eu estou adicionando este comentário aqui no caso de alguém encontrar outro lugar esta questão da mesma forma.

Acontece que o erro de vinculador no meu caso foi devido a um errante:

    add_definitions(-DBOOST_ALL_DYN_LINK)

no CMakeLists.txt, o que é bom para Unix, mas não o Windows no meu caso. A solução não é usar esse definir no Windows.

Eu precisava de ambas as versões e alvo estágio usado, então eu usei --stagedir =. / StageX86 para a versão x86 ea ./stage padrão para x64

Eu também vim aqui de para este erro vinculador mais CMake, mas no meu caso, foi o fato de que CMake por padrão vai tentar construir com 32 bits por padrão. Isso foi corrigido especificando -Ax64

cmake -Ax64 {path to CMakeLists.txt}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top