Pergunta

Eu estou construindo um C ++ aplicativo e precisa usar PDCurses no Windows. Estou compilando com VC ++ do MS VS 2005 e eu estou recebendo um erro de link.

 error LNK2019: unresolved external
 symbol __imp__GetKeyState@4 referenced
 in function __get_key_count

Há 11 erros, todos com o mesmo código de erro e símbolos diferentes. Os símbolos que faltam são __imp__MapVirtualKeyA @ 8, __imp__FindWindowA @ 8, __imp__wsprintfA, __imp__SendMessageA @ 16, __imp__GetWindowThreadProcessId @ 8, __imp__MessageBeep @ 4. É quase como o VC ++ não consegue encontrar as implementações ASCII apropriados destas funções. Gostaria também de salientar que os programas de demonstração que vêm com PDCurses bem compiladas, apesar de serem programas C.

No programa de C ++, que inclui o cabeçalho usando

extern "C" 
{ 
    #include <curses.h> 
}

Eu tenho certeza que estou esquecendo de ligação contra alguns biblioteca padrão C, mas não tenho certeza qual.

Foi útil?

Solução

GetKeyState () é uma função do Windows em "user32.dll", então você precisa ter certeza de que você está ligando contra "User32.lib". Você também pode precisar para ter certeza que vem depois da biblioteca PDCurses na lista de bibliotecas do vinculador também.

Outras dicas

Você construir PDCurses em sua máquina - com MS VC ++? Se assim for, eu não tenho certeza do que está acontecendo. Se não, então há uma boa chance de que o que você está usando não é compatível com o MS VC ++. Mistura de código diferentes compiladores C ++ é cheio. Também depende um pouco sobre o que você quer dizer com 'vários outros erros'. Se isso é um eufemismo grotesca para 'centenas de erros', então isso é provavelmente o problema. Se você tem apenas alguns (dizer outra meia dúzia ou menos) erros semelhantes, então é menos provável de ser o problema.

Ok, eu descobri isso;) Eu estou construindo com scons, eu estava incluindo User32.lib com um USER32_LIB variável, cujo valor padrão é uma seqüência vazia, exceto em janelas onde fica definido para User32.lib. Na seção janelas, eu tinha um erro de digitação, eu tinha USER32_LIb em vez de USER32_LIB.

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