erro fatal LNK1104: não é possível abrir o arquivo 'libboost_system-vc110-mt-gd-1_51.lib'


88

Parece que não consigo fazer isso funcionar. Fiz um aplicativo de console simples (que depende de websocket++biblioteca) que precisa de Boostbibliotecas .. mas quando tento compilar, obtenho:

erro fatal LNK1104: não é possível abrir o arquivo 'libboost_system-vc110-mt-gd-1_51.lib'

No entanto, fiz o bjam que criou a lib no (boost_root)/stage/libse vinculei o caminho das libs ao compilador C++/Additionnals includes.

Se eu olhar no (boost_root)/stage/libsarquivo libboost_system-vc110-mt-gd-1_51.libnão está lá. Em libboost_system-vc110-mt-sgd-1_51.libvez disso, é chamado .

Qualquer ideia?


1
Consegui construir o arquivo libboost_system-vc110-mt-gd-1_51.lib fazendo uma compilação completa com bjam, mas ainda recebo o erro.
— Rushino

21
Abra o VS2012 developer command prompt, vá para o diretório raiz boost e digite bootstrap, e então digite b2e você deve obter um conjunto completo de arquivos de biblioteca.
— Jesse Good

Você adicionou os caminhos de inclusão e os caminhos do vinculador ao seu projeto?
— Jesse Good

1
Você está construindo seu aplicativo com /MD?
— Mahesh

Respostas:


93

O parâmetro C ++ → Geral → Diretórios de inclusão adicionais é para listar os diretórios onde o compilador irá procurar por arquivos de cabeçalho.

Você precisa dizer ao vinculador onde procurar bibliotecas para vincular. Para acessar esta configuração, clique com o botão direito do mouse no nome do projeto na janela do Solution Explorer , em seguida, Propriedades → Linker → Geral → Diretórios de biblioteca adicionais . Digite <boost_path>\stage\libaqui (este é o caminho onde as bibliotecas estão localizadas se você construir o Boost usando as opções padrão).


você pode me explicar o que é boost_path
— ggsmartboy

1
@ggsmartboy É o caminho onde estão os arquivos de origem do boost (o mesmo caminho que você lista no compilador inclui caminhos para que ele possa localizar os cabeçalhos do boost). A resposta assume que você mesmo construiu o boost (sem usar uma distribuição) usando as opções de construção padrão.
— Pretoriano de

Impressionante. Me salvou de uma verdadeira dor de cabeça também. Por que eu não consegui identificar isso na documentação do boost (se é que está lá), eu não sei! :)
— absentmindeduk

2
As configurações referidas nesta resposta são encontradas se você clicar com o botão direito do mouse no projeto e escolher propriedades (para novatos como eu, clicar com o botão direito na solução, ir para Ferramentas> Opções etc. Essas opções não estavam presentes em todos os meus projetos). VS2013
— Mr_and_Mrs_D

1
@Mr_and_Mrs_D Você está certo, presumi que o leitor sabia dessa parte. Atualizada.
— Pretoriano

94

Esta é a maneira mais simples para um amador como eu que está estudando C ++ por conta própria:

Primeiro descompacte a biblioteca boost para qualquer diretório de sua escolha. Eu recomendo c:\directory.

  1. Abra seu C ++ visual.
  2. Crie um novo projeto.
  3. Clique com o botão direito no projeto.
  4. Clique na propriedade.
  5. Clique em C / C ++.
  6. Clique em geral.
  7. Selecione a biblioteca de inclusão adicional.
  8. Inclui o destino da biblioteca. por exemplo c:\boost_1_57_0.
  9. Clique no cabeçalho do pré-compilador.
  10. Clique em criar / usar cabeçalho pré-compilado.
  11. Selecione não usar cabeçalho pré-compilado.

Em seguida, vá para a biblioteca de links onde você teve seus problemas.

  1. Vá para onde estava o arquivo extraído c:\boost_1_57_0.
  2. Clique em booststrap.bat(não se preocupe em digitar na janela de comando apenas espere e não feche a janela que é o local onde tive meu problema que levei duas semanas para resolver. Depois de um tempo, o booststrapserá executado e produzirá o mesmo arquivo, mas agora com dois nomes diferentes: b2e bjam.
  3. Clique em b2e espere para executar.
  4. Clique em bjame espere para executar. Em seguida, uma pasta será chamada de produção stage.
  5. Clique com o botão direito no projeto.
  6. Clique na propriedade.
  7. Clique no linker.
  8. Clique em geral.
  9. Clique em incluir diretório de biblioteca adicional.
  10. Selecione a parte da biblioteca, por exemplo c:\boost_1_57_0\stage\lib.

E você está pronto para ir!


3
Muito obrigado Wu Jie - Eu nunca tinha feito nada parecido antes e essas etapas foram exatamente o que eu precisava para construir o Boost e produzir o arquivo de biblioteca 'libboost_serialization-vc140-mt-gd-1_57.lib' ausente que estava tendo problemas para vincular: )
— Vixxd

5
Obrigado, eu gosto de boas instruções detalhadas. Para a etapa 2/3/4 da configuração do boost, o que fiz foi: a) abrir um prompt de linha de comando como root ; b) mude para o diretório boost_1_57_0; c) digite bootstrap.bat(demorou 10-20 segundos); d) digite ./b2conforme as instruções (demorava 30-40 minutos para ser concluído).
— Darren Cook,

1
Tive que abrir bootstrap.bat usando o prompt de comando do Visual Studio, pois o prompt de comando normal não sabia como processar o comando 'cl'.
— jlaverde

20/02/2018, sua solução funciona para mim (VS2017 + Boost 1,66). Muito obrigado.
— CaTx de

Obrigado pelas etapas para iniciantes. Eu gostaria que todos sempre dessem respostas como você deu.
— Mudit Jain

6

Eu tive o mesmo problema. Isso foi causado porque compilei o Boost com o Visual C ++ 2010 (v100) e tentei usar a biblioteca com o Visual Studio 2012 (v110) por engano.

Então, mudei as configurações (no Visual Studio 2012) indo para Propriedades do projeto -> Geral -> Conjunto de ferramentas da plataforma e alterei o valor do Visual Studio 2012 (v110) para o Visual Studio 2010 (v100) .


7
Espero que você perceba que, ao alterar o conjunto de ferramentas da plataforma para usar o v100, está dizendo ao IDE do VS2012 para usar o compilador que acompanha o VS2010. Quaisquer recursos do C ++ 11 que foram adicionados ao compilador VS2012 não estarão disponíveis. Uma solução melhor é compilar o Boost usando o compilador VS2012; você pode ter as bibliotecas geradas de 2010 e 2012 coexistindo porque o Boost coloca o número da versão do compilador nos nomes dos arquivos de saída.
— Pretoriano,

Você está certo e eu estou ciente. Tenho medo do que possa acontecer se eu atualizar as bibliotecas e o compilador. Então, quando o projeto terminar, vou consertar tudo isso. Obrigado!
— Jota Santos

6

Mais uma solução:

Fiquei perplexo porque estava incluindo boost_regex-vc120-mt-gd-1_58.lib em minha propriedade Link-> Dependências Adicionais, mas o link dizia que não conseguia abrir libboost_regex-vc120-mt-gd-1_58.lib ( observe o prefixo lib). Eu não especifiquei libboost_regex-vc120-mt-gd-1_58.lib.

Eu estava tentando usar (e tinha construído) as bibliotecas dinâmicas de impulso (.dlls), mas não tinha a macro BOOST_ALL_DYN_LINK definida. Aparentemente, há dicas na compilação para incluir uma biblioteca, e sem BOOST_ALL_DYN_LINK ele procura a biblioteca estática (com o prefixo lib), não a biblioteca dinâmica (sem um prefixo lib).


Ainda apenas 1 voto positivo, mas eu me encontro aqui a cada poucos meses, sendo lembrado novamente qual é a solução para o meu problema !!
— Neil Gatenby

3

Tive o mesmo problema e meu erro foi ter instalado o binário boost_1_55_0-msvc-11.0-32.exe para usar com o visual c ++ 2010 que tem a versão v100 (propriedades do projeto-> ConfiguratioProperties-> Geral-> platformTooset) não v110 como visual c ++ 2012. Então baixei boost_1_55_0-msvc-10.0-32.exe e agora está tudo ok até agora.


2

Caso você tenha problemas para criar boost ou prefira não fazer isso, uma alternativa é baixar os arquivos lib do SourceForge . O link o levará a uma pasta de arquivos lib e dll compactados para a versão 1.51. Porém, você deve ser capaz de editar o link para especificar a versão de sua escolha. Aparentemente, o instalador do BoostPro tem alguns problemas.


2

Tive um problema semelhante ao tentar usar o teste de unidade de impulso no Visual Studio 2015 (Community Edition):

erro fatal LNK1104: libboost_unit_test_framework-vc140-mt-1_57

então pensei em compartilhar minha solução.

Você pode criar um projeto de teste de unidade de impulso de duas maneiras (e esta solução funciona para ambas):

  1. usando o adaptador de teste da unidade de reforço
  2. ou criando um aplicativo de console Win32 ( etapas aqui ) e substituindo a função principal por uma função de teste de unidade de reforço ( etapas aqui ).

Aqui estão as etapas que segui para fazer os dois projetos funcionarem:

Primeiro, baixe a versão boost desejada (por exemplo, boost_1_57_0 ). Você pode baixar o boost com os binários corretos (compilados usando msvc v140) ou extrair os binários você mesmo executando os seguintes comandos na linha de comando:

  1. bootstrap.bat
  2. "C: \ Arquivos de programas (x86) \ Microsoft Visual Studio 14.0 \ VC \ vcvarsall.bat" x86
  3. bjam --clean
  4. bjam -j4 --debug-symbols = on --build-type = complete toolset = msvc-14.0 threading = multi runtime-link = shared address-model = 32

Onde msvc-14.0 especifica que exigimos a versão do Visual Studio 2015 (VS 2015 = v14.0 = v140) e address-model = 32 especifica que exigimos a plataforma 32 (mas o mesmo pode ser feito para 64 bits).

Depois de ter os binários, vá para o Visual Studio, selecione o projeto Boost Unit Testing que você criou. Acesse Propriedades do projeto> configuração (no menu principal) e faça as seguintes escolhas:

  • Defina " Geral> Conjunto de ferramentas da plataforma " para Visual Studio 2015 (v140).

  • Inclua o caminho para a pasta boost (por exemplo, C: \ boost_1_57_0) e o caminho para a subpasta contendo os arquivos binários (por exemplo, C: \ boost_1_57_0 \ stage \ lib) em:

    • " C \ C ++> Diretório de inclusão adicional "
    • e " Linker> Diretórios de biblioteca adicionais ".

1

b2 -j% cores% toolset =% msvcver% address-model = 64 arquitetura = x86 link = static threading = multi runtime-link = compartilhado --build-type = mínimo stage --stagedir = stage / x64

Propriedades → Linker → Geral → Diretórios de biblioteca adicionais $ (BOOST) \ stage \ x64 \ lib


Um pouco mais de elaboração sobre o que essas linhas estão fazendo e por que -> ajudaria a melhorar a qualidade dessa resposta.
— Anton Menshov

0

Eu tive o mesmo problema relatado aqui. Resolvi o problema ao mover mainTest.cpp de uma subpasta src / mainTest / para a pasta principal src / Acho que esse também era o seu problema.


0

2>LINK : fatal error LNK1104: cannot open file 'libboost_regex-vc120-mt-sgd-1_55.lib

No meu caso, bootstrap / bjam não estava disponível (bibliotecas foram pré-compiladas e comprometidas com SCM) no antigo projeto herdado. As bibliotecas não tinham controle de versão VC ou BOOST em seus nomes de arquivo, por exemplo:, no libboost_regex-mt-sgd.libentanto, Processed /DEFAULTLIB:libboost_regex-vc120-mt-sgd-1_55.libera de alguma forma acionado automaticamente.

Corrigido adicionando manualmente o nome do arquivo sem versão a:

<AdditionalDependencies>$(DK_BOOST)\lib64\libboost_regex-mt-sgd.lib</AdditionalDependencies>

e na lista negra do ...vc120-mt-sgd-1_55.libno

<IgnoreSpecificDefaultLibraries>libboost_regex-vc120-mt-sgd-1_55.lib</IgnoreSpecificDefaultLibraries>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.