Comment puis-je créer un lien PDCURSES à une application C ++ sous Windows?
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.
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
.