这是在 Windows 7 上运行时 Dev-C++ 附带的编译器,“TDM-GCC 4.9.2 64 位版本”。同样的事情也发生在 64 位版本上。 “Compiler Options”中的“调用链接器时添加以下标志”设置为-static-libgcc -lws2_32
,“调用编译器时添加以下标志”为std= c++11
.
不幸的是,我无法获得比这更多的信息,因为这是一台非常非常锁定的计算机。
回到家后,我会在那里测试它并在任何新信息中进行编辑。
一个测试文件:
#include <windows.h>
#include <psapi.h>
#include <iostream>
int main() {
HANDLE h = GetCurrentProcess();
TCHAR name[100];
GetProcessImageFileName(h, name, 100);
std::cout << "Name is " << std::endl;
}
编译时出现如下错误:
C:\Users\[REDACTED]\AppData\Local\Temp\ccQz3L9P.o:test.cpp:(.text+0x2f): undefined reference to `GetProcessImageFileNameA'
据我所知,它调用 GetProcessImageFileNameA
而不是 GetProcessImageFileName
因为 psapi.h< 中的
:#define
/
#define GetProcessImageFileName __MINGW_NAME_AW(GetProcessImageFileName)
__MINGW_NAME_AW(func)
在 _mingw_unicode.h
中被#define
定义为 func##A
,它如果我理解正确的话,这就是新方法名称的来源。
回到psapi.h
,声明了DWORD WINAPI GetProcessImageFileNameA(HANDLE, LPSTR, DWORD);
,但我没有在任何地方找到它的定义,而且Dev- C++也不行。我相当确定这就是问题所在。
我该如何解决?我对任何事情都持开放态度,包括切换编译器或 IDE,只要我可以将我使用的任何东西放在闪存驱动器上并尽可能少地随身携带,并且最终结果不需要管理员运行权限。
最佳答案
GetProcessImageFileName
是一个 Windows API 函数,您需要链接到正确的库才能访问它。
它被定义为 GetProcessImageFileNameA
或 GetProcessImageFileNameW
的宏,具体取决于您编译的是“宽”还是“窄”。
Win32 API 有每个函数的 Unicode 和 ascii 版本(至少是接受字符串的函数)。一般情况下,ascii版本是将字符转成Unicode,内部调用其他植入。
关于c++ - TDM-GCC 引发错误 : Undefined reference to a method I never called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33154710/