Как связать PDCurses с приложением C ++ в Windows? - PullRequest
0 голосов
/ 30 декабря 2008

Я создаю приложение на C ++ и мне нужно использовать PDCurses в Windows. Я компилирую с VC ++ из MS VS 2005 и получаю ошибку ссылки.

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

Всего 11 ошибок с одинаковым кодом ошибки и разными символами. Отсутствующие символы: __imp__MapVirtualKeyA @ 8, __imp__FindWindowA @ 8, __imp__wsprintfA, __imp__SendMessageA @ 16, __imp__GetWindowThreadProcessId @ 8, __imp__MessageBeep @ 4. Это похоже на то, что VC ++ не может найти соответствующие реализации этих функций в ASCII. Следует также отметить, что демонстрационные программы, поставляемые с PDCurses, скомпилированы нормально, хотя они и являются программами на Си.

В программе на C ++ я включаю заголовок, используя

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

Я уверен, что забыл связать какую-то стандартную библиотеку C, но я не уверен, какая именно.

Ответы [ 3 ]

2 голосов
/ 30 декабря 2008

GetKeyState () - это функция Windows в «user32.dll», поэтому вы должны быть уверены, что вы ссылаетесь на «user32.lib». Вам также может потребоваться убедиться, что он идет после библиотеки PDCurses в списке библиотек компоновщиков.

1 голос
/ 30 декабря 2008

Вы строили PDCurses на своей машине - с MS VC ++? Если так, я не уверен, что случилось. Если нет, то есть большая вероятность того, что то, что вы используете, несовместимо с MS VC ++. Смешивать код из разных компиляторов C ++ чревато. Это также немного зависит от того, что вы подразумеваете под «несколькими другими ошибками». Если это гротескное преуменьшение «сотен ошибок», то это, вероятно, проблема. Если у вас есть только несколько (скажем, еще полдюжины или меньше) подобных ошибок, то это вряд ли будет проблемой.

0 голосов
/ 31 декабря 2008

Хорошо, я понял это;) Я строю с помощью scons, я включил user32.lib с переменной USER32_LIB, которая по умолчанию равна пустой строке, за исключением окон, где она определена как user32.lib. В разделе окон у меня была опечатка, у меня было USER32_LIb, а не USER32_LIB.

...