Pergunta

Duplicate possíveis:
O que é um indefinido referência / não resolvida erro de símbolo externo e como faço para corrigir isso?

Eu estou trabalhando em envolver um grande número de arquivos .h e .lib de C ++ nativo para C ++ gerenciado para eventual uso como referência .dll em C #.

Eu tenho os arquivos .lib ligados e tudo foi indo bem até agora. Após a envolver o arquivo .h mais recente, I atingiu um problema quando 2 funções voltou com o erro link:

error LNK2019: unresolved external symbol __imp__htonl@4 referenced in function
"public: void __thiscall Field::setCharacter(unsigned char,int)"
(?setCharacter@Field@@QAEXEH@Z) myutils.lib 

Eu referenciada myutils.lib nas opções vinculador, de modo que não deve ser o problema.

O que é estranho é que eu tenho cerca de 20 funções neste arquivo .h em particular e todo o resto estão ligando muito bem com exceção de 3 funções.

Todas as idéias?

Foi útil?

Solução

O símbolo falta é __imp__htonl@4, que é um C ++ nome desconfigurado para htonl, que é uma função que converte um valor longo do anfitrião ao fim rede. O @ 4 é usado para mutilar os parâmetros de entrada e faz parte do suporte C ++ para funções sobrecarregadas para permitir que o vinculador para resolver a função direita w / o colisões de nomes.

Certifique-se de que você está vinculado à biblioteca de rede que você está fazendo referência este símbolo de. Presumivelmente, o seu pacote está usando alguma definição especial deste símbolo, em vez da macro que geralmente é.

Outras dicas

Você tem certeza as assinaturas combinar? Certifique-se de verificada a assinou-ness e const-ness. Além disso, certifique-se de funções não são inlined.

Eu corri para este erro quando eu compilado com uma biblioteca e em seguida, mudou a biblioteca antes de ligar. Certifique-se de seus cabeçalhos são os mesmos fornecidos pela sua biblioteca (não copiado de outra arquitetura, etc). Claro, certifique-se que você está ligando contra Ws2_32.lib (-lws2_32 para mingw / gcc).

Além disso, se você estiver usando o GCC / mingw você pode querer dar uma olhada nisso: MinGW erro vinculador: winsock

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