Come faccio a collegare PDCurses a un'applicazione C ++ su Windows?
Domanda
Sto costruendo un'applicazione C ++ e la necessità di utilizzare PDCurses su Windows. Sto compilando con VC ++ da MS VS 2005 e sto ottenendo un errore di collegamento.
error LNK2019: unresolved external symbol __imp__GetKeyState@4 referenced in function __get_key_count
Ci sono 11 gli errori, tutte con lo stesso codice di errore e diversi simboli. I simboli mancanti sono __imp__MapVirtualKeyA @ 8, __imp__FindWindowA @ 8, __imp__wsprintfA, __imp__SendMessageA @ 16, __imp__GetWindowThreadProcessId @ 8, __imp__MessageBeep @ 4. E 'quasi come il VC ++ non riesce a trovare le implementazioni ASCII appropriati di queste funzioni. Vorrei anche notare che i programmi dimostrativi che vengono con PDCurses compilati bene, anche se sono programmi C.
Nel programma C ++, includo l'intestazione utilizzando
extern "C"
{
#include <curses.h>
}
Sono sicuro che sto dimenticando di collegare contro alcuni libreria standard C, ma non sono sicuro che uno.
Soluzione
GetKeyState () è una funzione di Windows in "user32.dll", quindi è necessario essere sicuri che stai collegando contro "user32.lib". Potrebbe anche essere necessario per assicurarsi che viene dopo la biblioteca PDCurses nella lista delle librerie linker, anche.
Altri suggerimenti
Lo si costruisce PDCurses sulla vostra macchina - con MS VC ++? Se è così, io non sono sicuro di quello che succede. Se no, allora c'è una buona probabilità che ciò che si sta utilizzando non è compatibile con MS VC ++. Mescolando il codice da diversi compilatori C ++ è carico. Dipende anche un po 'su quello che si intende per' molti altri errori. Se questo è un eufemismo grottesca di 'centinaia di errori', allora questo è probabilmente il problema. Se si dispone di pochi (diciamo un'altra mezza dozzina o meno) errori simili, quindi è meno probabile che sia il problema.
Va bene, ho capito questo;) sto costruendo con scons, mi era compresa user32.lib con un USER32_LIB
variabili, che per default è una stringa vuota, tranne sulle finestre dove viene definito a user32.lib. Nella sezione di Windows, ho avuto un errore di battitura, avevo USER32_LIb
piuttosto che USER32_LIB
.