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
相关产品推荐
相关产品推荐

