MinGW-w64无法解析threadpoolapiset.h声明的函数

时间:2015-10-10 20:05:22

标签: c++ winapi mingw-w64

当我尝试在Eclipse中使用MinGW-w64构建以下代码时,我收到错误“函数'CreateThreadpool'无法解析” 代码:

#define WINVER 0x0603
#define _WIN32_WINNT 0x603
#include <threadpoolapiset.h>

int main(void)
{
    CreateThreadpool(nullptr);
    return 0;
}

注意:如果我删除了Windows版本的定义,那么我会得到2个错误:

  1. 'CreateThreadpool'未在此范围内声明
  2. 无法解析功能'CreateThreadpool'
  3. 这意味着定义使threadpoolapiset.h头部可以声明windows API函数。

    回到最初的例子,这里的问题是链接器找不到定义此函数的库。

    根据MSDN,该函数在库kernel32.lib和DLL kernel32.dll中定义。 我发现在MinGW-w64目录中,kernel32库被发现为libkernel32.a,所以我尝试在C / C ++ Build&gt;中包含路径和库。设置|标签'工具设置'&gt; GCC C ++编译器&gt;包括

    我尝试包含目录,库文件和两者。我也是在MinGW C ++ Linker&gt;中做到了这一点。库

    有谁知道我怎么能让它发挥作用?

1 个答案:

答案 0 :(得分:0)

线程池API仅添加到MinGW 4.0中的链接器文件中。您需要升级。

<强>窗

如果你通过MSYS2下载了MinGW-w64,那么升级应该很简单;只需按照说明here

如果你安装了Win-Builds二进制包,只需卸载它,下载新的二进制包,然后安装它。

如果您将MinGW-w64作为IDE的一部分,那么您需要咨询IDE供应商以了解如何升级。

<强>的Linux

不幸的是,MinGW-w64 4.0比大多数发行版提供的更新。如果你使用Ubuntu,15.10即将到来,而应该拥有它。如果没有,那么你需要从源代码构建。从源头构建的过程有点复杂;转到OFTC的MinGW-w64 IRC频道并问那里:/那是我必须做的事情,无论如何。祝你好运。

请注意David Hefferman和公司

MinGW-w64不使用Microsoft使用的相同SDK模型。可用的内容基于所使用的MinGW版本,并且经常添加新内容并在后续版本中提供。 (事实上​​,使用MinGW-w64而不是香草MinGW的原因是它支持从XP开始引入的大多数API。)