【问题标题】:error : LNK2019: unresolved external symbol "extern "C"错误:LNK2019:未解析的外部符号“extern”C“
【发布时间】:2014-02-25 20:38:15
【问题描述】:

这个未解决的外部有什么问题?我正在尝试将其实现到我的 MFC 应用程序的InitInstance 中。但是我从调试器中得到了这一行错误。

LNK2019: unresolved external symbol "extern "C" int __stdcall EnumProcesses(unsigned long *,unsigned long,unsigned long *)" (?EnumProcesses@@$$J212YGHPAKK0@Z) referenced in function "public: virtual int __thiscall COkApp::InitInstance(void)" (?InitInstance@COpenEyeProcessApp@@$$FUAEHXZ)

这是OkApp 文件:

OkApp.h

//...
#include <psapi.h>
//...

OkApp.cpp

#include "OkApp.h"
//...
BOOL COkApp::InitInstance()
{
    //...
    if (!EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded))
    {
        return 1;
    }
    //...
}

知道我的项目被编码为Unicode project,请问我该如何解决这个问题?

请问有什么绝妙的主意吗?

【问题讨论】:

  • 你是否链接了 Psapi.lib 库?
  • @MichaelWalz,不知道怎么办?
  • 在项目properties->Configuration Properties->Linker->Input->Additional Dependencies添加psapi.lib,或者按照CodeDreamer的回答建议做。

标签: c++ mfc


【解决方案1】:

您需要链接 Psapi.lib。

#pragma comment(lib, "Psapi.lib") 

【讨论】:

  • .cpp 文件或.h 文件中?请问我需要删除#include &lt;psapi.h&gt;line 吗?
  • 只需在#include 下方输入您的.cpp。
  • 请问#pragma comment 是什么意思?
  • #pragma comment 可以以多种方式使用。在这种情况下,它用于链接库。
  • 但是,#include#pragma comment 有什么区别?
【解决方案2】:

看起来EnumProcesses 在标头中声明为extern "C",但在源文件中没有。两者必须一致。将两者都更改为 extern "C"(如果您打算在 C 中使用 EnumProcesses),或者删除标题中的 extern "C"

编辑:或者您只是在调用链接器时忘记添加包含EnumProcesses 的库。

【讨论】:

  • 你能详细说明一下吗?
  • 首先你应该提供更多细节。 EnumProcesses 是您自己编写的内容的一部分,还是您想要使用的 API 的一部分?
  • 来自#include &lt;psapi.h&gt;
  • 那么“EDIT”后面的部分是错误的。但您似乎已经在 CodeDreamers 的帮助下解决了这个问题。
猜你喜欢
  • 2018-07-04
  • 1970-01-01
  • 2012-10-31
  • 2012-08-31
相关资源
最近更新 更多