已引入<windows.h>和<Psapi.h>仍报错QueryFullProcessImageName未在该作用域声明
编译报错解决方法
原因1:Windows API版本适配宏未正确配置
QueryFullProcessImageName 仅支持 Windows Vista 及以上版本的系统,MinGW 编译器默认的 Windows 适配宏通常设置为兼容 Windows XP 及更早版本,因此头文件不会暴露该函数的声明。
解决方法:在引入windows.h之前,先定义 Windows 版本适配宏,代码示例如下:
// 0x0600 对应 Windows Vista 版本,需写在所有Windows头文件引入之前 #define _WIN32_WINNT 0x0600 #include <windows.h> #include <Psapi.h>
如果需要适配更高版本的Windows,可以将宏值替换为对应版本号:
- Windows 7:
0x0601 - Windows 8:
0x0602 - Windows 10/11:
0x0A00
原因2:编译时未链接Psapi依赖库
QueryFullProcessImageName属于Psapi模块的导出函数,编译时需要显式链接对应的库。
解决方法:在g++编译命令的末尾添加链接参数-lpsapi,示例命令如下:
# 单步编译运行的场景 g++ -O3 -Wall -o your_program.exe "..\\main.cpp" -lpsapi # 分步骤编译链接的场景 g++ -O3 -Wall -c -fmessage-length=0 -o main.o "..\\main.cpp" g++ -o your_program.exe main.o -lpsapi
完成以上两处修改后即可正常编译。
内容的提问来源于stack exchange,提问作者Richard
相关产品推荐
相关产品推荐

