【问题标题】:How do I link PDCurses to a C++ application on Windows?如何将 PDCurses 链接到 Windows 上的 C++ 应用程序?
【发布时间】:2008-12-30 04:33:09
【问题描述】:

我正在构建一个 C++ 应用程序,需要在 Windows 上使用 PDCurses。我正在使用 MS VS 2005 中的 VC++ 进行编译,但出现链接错误。

 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 程序。

在 C++ 程序中,我使用

包含标题
extern "C" 
{ 
    #include <curses.h> 
}

我确定我忘记链接某个 C 标准库,但我不确定是哪个。

【问题讨论】:

    标签: c++ windows linker ncurses pdcurses


    【解决方案1】:

    GetKeyState() 是“user32.dll”中的 Windows 函数,因此您需要确保链接到“user32.lib”。您可能还需要确保它也位于链接器库列表中的 PDCurses 库之后。

    【讨论】:

    • 是的,我已经找到了那些潜在的问题,我正在链接 User32.lib、advapi32.lib 等。这似乎没有帮助。我认为 VC++ 尝试链接 C 代码存在某种问题,但我无法想象为什么。
    • 你检查过顺序,让user32.lib在PDCurses.lib之后吗?
    • 是的,当我发现拼写错误时,我开始玩弄订单。
    【解决方案2】:

    您是否在您的机器上使用 MS VC++ 构建了 PDCurses?如果是这样,我不确定发生了什么。如果不是,那么您使用的东西很有可能与 MS VC++ 不兼容。混合来自不同 C++ 编译器的代码是令人担忧的。这也取决于您所说的“其他几个错误”是什么意思。如果这是对“数百个错误”的荒谬轻描淡写,那么这可能就是问题所在。如果您只有几个(比如另外六个或更少)类似的错误,那么问题就不太可能发生。

    【讨论】:

    • 是的,使用相同的编译器构建在同一台机器上。总共有 11 个未定义的引用错误(相同的错误代码不同的符号)。
    【解决方案3】:

    好的,我想通了 ;) 我正在使用 scons 构建,我在 user32.lib 中包含了一个变量 USER32_LIB,它默认为空字符串,除非在 Windows 上它被定义为 user32.lib。在 windows 部分,我有一个错字,我有USER32_LIb 而不是USER32_LIB

    【讨论】:

      猜你喜欢
      • 2019-02-13
      • 1970-01-01
      • 1970-01-01
      • 2014-12-21
      • 2012-03-03
      • 2016-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多