Pergunta

Eu descobri como configurar o VC++ para compilar o código em um arquivo .lib em vez de um .exe, mas estou tendo problemas para fazer com que uma lib seja vinculada a meus outros arquivos .obj.

Veja como configuro a biblioteca e as pastas do aplicativo.(não tenho certeza se isso está certo)

AppFolder
  App.sln
  App.ncb
  *.h
  *.cpp
  Debug
    *.obj
    App.exe

e em algum outro lugar no disco rígido ...

LibraryFolder
  lib
    Library.lib
  include
    LibrarySolutionFolder
      Library.sln
      Library.ncb
      *.h
      *.cpp
      Debug
        *.obj
        Library.lib

#Incluí os arquivos da biblioteca *.h dos arquivos cpp do meu aplicativo e tudo compila bem.É apenas quando vincula uma lista de todos os arquivos .lib que estão sendo pesquisados, e a biblioteca.lib não está lá, mesmo que eu o tenha listado nos diretórios VC ++.Como posso fazer com que isso seja vinculado?(E estou estruturando as pastas da biblioteca corretamente?)

Foi útil?

Solução

Nas propriedades do projeto:

Propriedades de configuração -> Linker -> Entrada -> Dependências adicionais

Adicione lá.

Ou, no seu arquivo .h para a biblioteca, adicione:

#pragma comment(lib, "Library")

Isso fará isso automaticamente para você.

Outras dicas

Os diretórios VC++ são a lista de locais de diretório a serem pesquisados ​​durante a vinculação.Não é uma lista de bibliotecas a serem vinculadas.

Você precisa adicionar o arquivo lib ao Dependências Adicionais campo do Vinculador de projeto configurações.

Para vincular uma biblioteca, você pode:

  • Liste-o em Project-> Propriedades ...-> Linker, Input-> Dependências adicionais (os diretórios VC ++ apenas permitem usar apenas o nome .lib, em vez do caminho completo),
  • Adicione o projeto da biblioteca ao seu aplicativo. Solução (na solução, clique com o botão direito do mouse -> Adicionar -> Projeto existente ...) e, em seguida, use o projeto -> dependências do projeto ... e verifique seu projeto de biblioteca (verifique se o projeto do aplicativo está selecionado no suspensão). Este é provavelmente o melhor caminho a percorrer se você estiver editando os dois projetos, pois o VC ++ reconstruirá a biblioteca se ele mudou antes de criar seu aplicativo.
  • Se você tem certeza de que usará apenas VC ++,

      #pragma comment(lib,"C:\\path\\to\\library.lib")`
    

    (Obrigado @nils)

NB: Parece muito estranho ter sua pasta de solução de biblioteca dentro de um diretório 'incluir': que são realmente destinados a *.h (ou outro #includeD arquivos).

Da linha de comando:

cl /ehsc {objfiles}+ /link /libpath: LibraryFolder Library.lib

Onde {objfiles}+ significa um ou mais arquivos de objeto ou CPP.

O VC não vincula simplesmente a biblioteca se você incluir o arquivo de cabeçalho.

Você deve dizer ao vinculador para usar a biblioteca. Por boas razões: você Alredy tem milhares de LIBs em sua pasta da biblioteca. Se o MSVC tivesse que pesquisar todos eles cada vez que vincular seu programa, ele teria que percorrer hundrets de megabytes de dados.

Isso levaria um bom tempo, portanto, não é feito por padrão.

Para o VC, você também pode dar uma dica ao vinculador dentro da sua fonte. Para isso, você adiciona a seguinte linha em algum lugar do seu código de origem (o cabeçalho da lib pode ser um bom lugar).

#pragma comment(lib,"c:\\path_to_library\\libname.lib")

Isso não é a plataforma independente, mas a maneira mais conveniente de obter um LIB ligado automaticamente a um projeto usando o MSVC.

Outra maneira é simplesmente adicionar o vinculador às configurações do projeto. As informações relevantes podem ser encontradas nas configurações do linker do seu projeto. Não se esqueça de adicionar a lib às configurações de liberação e depuração.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top