c++ - TDM-GCC 引发错误 : Undefined reference to a method I never called

标签 c++ linker-errors tdm-mingw tdm-gcc

这是在 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 函数,您需要链接到正确的库才能访问它。

它被定义为 GetProcessImageFileNameAGetProcessImageFileNameW 的宏,具体取决于您编译的是“宽”还是“窄”。

Win32 API 有每个函数的 Unicode 和 ascii 版本(至少是接受字符串的函数)。一般情况下,ascii版本是将字符转成Unicode,内部调用其他植入。

关于c++ - TDM-GCC 引发错误 : Undefined reference to a method I never called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33154710/

相关文章:

c++ - 如何使用 std::auto_ptr 声明动态数组?

c++ - 理解这段代码 : C++, #define table and enums

gcc - 帮助链接器失败 : . gnu.linkonce.t

c++ - SFML - 创建光标和打印输入?

c++ - 为什么我在main函数和其他函数中看到数组大小的不同值

C++11 局部命名引用返回值(xvalue)?

c++ - 什么是 undefined reference /未解析的外部符号错误,我该如何解决?

ios - Xcode 链接器错误 : File not found

c - Orwell 的 MinGW 和 TDM Dev-C++ 版本有什么区别?

C++ GCC4.4 警告 : array subscript is above array bounds