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

Qt中调用GetModuleFileNameExW函数出现未定义引用错误求助

解决Qt中GetModuleFileNameExW链接错误的问题

这个问题我之前碰到过,本质是链接器找不到GetModuleFileNameExW的实现文件——这个函数属于Windows的PSAPI库,VS2019的项目可能默认配置了链接该库,但Qt Creator的项目不会自动帮你添加依赖,所以需要手动指定。

下面是两种可行的解决办法:

方法1:在Qt项目的.pro文件中添加链接指令

直接在你的.pro文件末尾加上这一行,告诉Qt链接PSAPI库:

LIBS += -lpsapi

如果你的项目需要跨平台,可以配合条件编译只在Windows平台生效:

win32 {
    LIBS += -lpsapi
}

方法2:在代码中添加编译指令(仅适用于MSVC编译器)

如果你只用MSVC编译项目,可以在代码开头添加#pragma comment指令,让编译器自动链接PSAPI库:

#include <iostream>
#include <windows.h>
#include <psapi.h>
#include <tlhelp32.h>
#include <QDebug> // 别忘了加这个头文件,不然qDebug会报错

#pragma comment(lib, "psapi.lib") // 添加这一行链接PSAPI库

int main() {
    HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, 7632);
    if (hProcess != NULL) { // 增加空指针判断,避免进程打开失败时崩溃
        wchar_t lpFilename[1024];
        // 注意这里用字符数而非字节数作为长度参数
        GetModuleFileNameExW(hProcess, NULL, lpFilename, sizeof(lpFilename)/sizeof(wchar_t));
        qDebug() << QString::fromWCharArray(lpFilename);
        CloseHandle(hProcess);
    } else {
        qDebug() << "OpenProcess failed, error code:" << GetLastError();
    }
    return 0;
}

另外补充两个实用细节:

  • 调用GetModuleFileNameExW时,第三个参数的长度应该是宽字符数,用sizeof(lpFilename)/sizeof(wchar_t)计算更准确,避免字节数和字符数混淆;
  • 一定要检查OpenProcess的返回值,如果进程不存在、权限不足等导致打开失败,后续操作会引发崩溃,加个判断更稳妥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 23:12:43