Как мне связать PDCurses с приложением на C ++ в Windows?
Вопрос
Я создаю приложение на 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, но я не уверен, с какой именно.
Решение
GetKeyState() - это функция Windows в "user32.dll", поэтому вам нужно быть уверенным, что вы ссылаетесь на "user32.lib".Возможно, вам также потребуется убедиться, что он также находится после библиотеки PDCurses в списке библиотек компоновщика.
Другие советы
Вы создавали PDCurses на своем компьютере - с помощью MS VC ++?Если да, то я не уверен, в чем дело.Если нет, то есть приличная вероятность того, что то, что вы используете, несовместимо с MS VC ++.Смешивание кода из разных компиляторов C ++ чревато.Это также немного зависит от того, что вы подразумеваете под "несколькими другими ошибками".Если это гротескное преуменьшение для "сотен ошибок", то, скорее всего, в этом и заключается проблема.Если у вас всего несколько (скажем, еще полдюжины или меньше) подобных ошибок, то вероятность возникновения проблем меньше.
Ладно, я разобрался с этим ;) Я создаю с помощью scons, я включал user32.lib с переменной USER32_LIB
, который по умолчанию использует пустую строку , за исключением Windows, где она определяется в user32.lib.В разделе Windows у меня была опечатка, у меня было USER32_LIb
вместо того , чтобы USER32_LIB
.