You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

32位MinGW g++提示找不到GetLogicalProcessorInformationEx如何解决?

问题产生原因

你遇到的链接错误是32位MinGW-W64 7.3.0版本的固有缺陷导致,和Clang本身无关:
GetLogicalProcessorInformationEx是Windows 7(对应_WIN32_WINNT 0x0601)及以上系统提供的原生API,你使用的32位MinGW-W64 7.3.0版本的kernel32导入库没有正确导出该API的32位符号,哪怕你已经按照Windows文档要求定义了_WIN32_WINNT宏,链接器也无法找到对应的函数实现,因此会报undefined reference错误。

修复方案

有两种可行方案:

  • 方案一:升级32位MinGW-W64到8.1.0及以上版本,新版本已经修复了该API符号缺失的问题,你实测升级后问题解决就是这个方案的验证结果。
  • 方案二:如果暂时无法升级MinGW版本,可以通过动态加载API的方式规避静态链接的符号缺失问题,修改后的测试代码如下:
#define _WIN32_WINNT 0x0601
#include <windows.h>
#include <stdio.h>

// 声明API对应的函数指针类型
typedef BOOL (WINAPI *LPFN_GETLOGICALPROCESSORINFORMATIONEX)(
    LOGICAL_PROCESSOR_RELATIONSHIP Relationship,
    PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Buffer,
    PDWORD BufferLength
);

int main()
{
    SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Buffer[10];
    DWORD Len = sizeof(Buffer);

    // 从系统自带的kernel32.dll中动态获取API地址
    HMODULE hKernel32 = GetModuleHandleW(L"kernel32.dll");
    LPFN_GETLOGICALPROCESSORINFORMATIONEX pfnApi = 
        (LPFN_GETLOGICALPROCESSORINFORMATIONEX)GetProcAddress(hKernel32, "GetLogicalProcessorInformationEx");
    
    if (pfnApi) {
        pfnApi(RelationProcessorCore, Buffer, &Len);
        // 此处补充你的业务逻辑
    } else {
        printf("当前系统版本过低,不支持该API\n");
        return 1;
    }

    return 0;
}

修改后直接使用原指令g++ test.cpp即可正常编译链接。

内容的提问来源于stack exchange,提问作者TonyK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 05:15:05