Erros não resolvidos símbolo externo de comutação da biblioteca de compilação para exe ou dll

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

  •  03-07-2019
  •  | 
  •  

Pergunta

Estou construindo uma aplicação como uma biblioteca, mas para ter certeza de que posso obter o resultado que eu gostaria, eu mudei-o para produzir um exe. Assim como eu fiz, eu tenho vários erros sobre símbolos externos não resolvidos.

No começo eu pensei que eu não tinha um conjunto caminho para a biblioteca parte 3 que eu estava fazendo referência, então eu adicionei a pasta a minha variável caminho e ainda acrescentou aos meus incluem, referências e arquivos de origem, apenas ter certeza que eu tinha todos os caminhos.

Eu ainda obter o erro:

LNK2019 de erro: não resolvido externo símbolo "__declspec (dllimport) público: vazio estático __cdecl xercesc_2_8 :: :: XMLPlatformUtils Inicializar (char const * const, const char * const, classe xercesc_2_8 :: PanicHandler * Const, classe xercesc_2_8 :: MemoryManager * const, bool)" (__Imp_? Inicializar @ XMLPlatformUtils @ @@ xercesc_2_8 SAXQBD0QAVPanicHandler @ @ 2 @ 2 @ QAVMemoryManager _N @ Z) referenciado na função "void __cdecl xsd :: CXX :: XML :: initialize (void)" (? Initialize @ xml @ CXX @ xsd @@ YAXXZ)

A razão que eu estou pedindo aqui é porque no Visual Studio, quando eu construí-lo como uma biblioteca, eu não obter esses erros, mas como uma dll e exe, eu faço.

Alguém tem alguma ideia?

Foi útil?

Solução

A construção de uma biblioteca, o vinculador não precisa de símbolos resolver importado. Isso só acontece quando ele começa vinculando objeto arquivos e bibliotecas juntos.

É por isso que você só começou a ver o erro ao construir um executável.

De fato, em VC2008 (e 2005, se me lembro bem), use as propriedades do projeto -> Linker -> Input -> dependências adicionais. As bibliotecas que você precisa devem ser separados por espaços (ímpares, hey?)

Boa sorte!

Outras dicas

Você também precisa especificar que você deseja vincular contra essa biblioteca em particular. Os caminhos de ligação meramente informar o vinculador onde os dados que você precisa encontrar é, não o que procurar. Você também vai precisar para especificar que você está ligando com a biblioteca em questão (xerces?).

Infelizmente, eu não sei como especificar isso em MSVC, mas é provavelmente em algum lugar sob 'Opções vinculador'.

Como @coppro disse, você precisa especificar que você quer vínculo com essa biblioteca. Quando você construir um EXE ou DLL, um agente de ligação é executado, e ele precisa encontrar todas as funções que você está usando, mas para construir uma biblioteca, o bibliotecário é executado, e ele não tem de resolver todas as referências de função (mas quando você usar essa lib em um EXE, você vai ter que, mais uma vez).

Então, vá às opções do projeto, Linker Opções, de entrada e lista a biblioteca que define a função ausente (xerces.lib?) Sob adicionais caminhos de biblioteca. Talvez seja necessário adicionar a sua localização sob adicionais caminhos de biblioteca.

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