Wie verknüpfe ich PDCurses auf eine C ++ Anwendung auf Windows?
Frage
Ich baue eine C ++ Anwendung und müssen PDCurses unter Windows verwenden. Ich bin mit VC ++ von MS VS 2005 kompiliert und ich einen Link Fehler.
error LNK2019: unresolved external symbol __imp__GetKeyState@4 referenced in function __get_key_count
Es gibt 11 Fehler alle mit dem gleichen Fehlercode und verschiedenen Symbolen. Die fehlenden Symbole sind __imp__MapVirtualKeyA @ 8, __imp__FindWindowA @ 8, __imp__wsprintfA, __imp__SendMessageA @ 16, __imp__GetWindowThreadProcessId @ 8, __imp__MessageBeep @ 4. Es ist fast wie die VC ++ nicht über die entsprechenden ASCII-Implementierungen dieser Funktionen finden können. Ich sollte auch beachten, dass die Demo-Programme, die mit PDCurses kommen fein zusammengestellt, obwohl sie C-Programme sind.
In dem C ++ Programm, schließe ich den Header mit
extern "C"
{
#include <curses.h>
}
Ich bin sicher, dass ich gegen eine C-Standardbibliothek zu verknüpfen bin zu vergessen, aber ich bin mir nicht sicher, welche.
Lösung
GetKeyState () ist eine Windows-Funktion in "user32.dll", so müssen Sie sicher sein, Sie eine Verknüpfung gegen "user32.lib". Sie können auch sicherstellen müssen, dass es in der Liste der Linker-Bibliotheken nach der PDCurses Bibliothek kommt auch.
Andere Tipps
Haben Sie bauen PDCurses auf Ihrem Rechner - mit MS VC ++? Wenn ja, ich bin nicht sicher, was los ist. Wenn nicht, dann gibt es eine gute Chance, dass das, was Sie verwenden, um mit MS VC ist nicht kompatibel ++. Misch Code aus verschiedenen C ++ Compiler ist voll. Es hängt auch ein wenig auf das, was Sie durch ‚mehrere Fehler‘ bedeuten. Wenn das eine groteske Untertreibung ist für ‚Hunderte von Fehlern‘, dann ist das wahrscheinlich das Problem. Wenn Sie nur ein paar (sagen wir ein weiteres halbes Dutzend oder weniger) ähnliche Fehler haben, dann ist es weniger wahrscheinlich, dass das Problem sein.
Okay, ich dachte, dies aus;) Ich baue mit scons, ich war mit user32.lib mit einem variablen USER32_LIB
, die standardmäßig auf eine leere Zeichenfolge, außer an den Fenstern, wo es definiert wird user32.lib. Im Fenster Abschnitt hatte ich einen Tippfehler, ich hatte USER32_LIb
statt USER32_LIB
.