Question

Je construis une application C ++ et avoir besoin d'utiliser PDCURSES sous Windows. Je compile avec VC ++ de MS VS 2005 et je reçois une erreur de lien.

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

Il y a 11 erreurs, toutes avec le même code d'erreur et symboles différents. Les symboles manquants sont __imp__MapVirtualKeyA @ 8, __imp__FindWindowA @ 8, __imp__wsprintfA, __imp__SendMessageA @ 16, __imp__GetWindowThreadProcessId @ 8, __imp__MessageBeep @ 4. Il est presque comme le VC ++ ne peut pas trouver les implémentations ASCII appropriées de ces fonctions. Je tiens également à noter que les programmes de démonstration qui viennent avec PDCURSES compilé bien, mais ils sont des programmes C.

Dans le programme C ++, je l'en-tête inclus en utilisant

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

Je suis sûr que je suis oublier de lier à une bibliothèque standard C, mais je ne suis pas sûr que l'on.

Était-ce utile?

La solution

GetKeyState () est une fonction Windows dans « user32.dll », vous devez donc être sûr que vous liez contre « user32.lib ». Vous devrez peut-être vous assurer qu'il vient après la bibliothèque PDCURSES dans la liste des bibliothèques de l'éditeur de liens, aussi.

Autres conseils

Avez-vous construit PDCURSES sur votre machine - avec MS VC ++? Si oui, je ne sais pas ce qui se passe. Sinon, il y a une bonne chance que ce que vous utilisez est pas compatible avec MS VC ++. Code de mélange de différents compilateurs C ++ de se heurte. Cela dépend aussi un peu ce que vous entendez par « plusieurs autres erreurs ». Si c'est un euphémisme grotesque pour « des centaines d'erreurs », alors c'est probablement le problème. Si vous avez quelques-uns (par exemple une demi-douzaine ou moins) des erreurs similaires, alors il est moins susceptible d'être la peine.

D'accord, je compris cela;) Je construis avec scons, j'incluais user32.lib avec une USER32_LIB variable, par défaut à une chaîne vide, sauf sur les fenêtres où il se défini à user32.lib. Dans la section windows, j'avais une faute de frappe, je l'avais USER32_LIb plutôt que USER32_LIB.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top