首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TDM-GCC引发错误:对我从未调用的方法的未定义引用。

TDM-GCC引发错误:对我从未调用的方法的未定义引用。
EN

Stack Overflow用户
提问于 2015-10-15 17:19:39
回答 1查看 1.2K关注 0票数 1

这与在Windows 7上运行的Dev-C++附带的编译器一起使用,"TDM-GCC 4.9.2 64位版本“。64位版本也会发生同样的情况。“编译器选项”中的“在调用链接器时添加以下标志”设置为-static-libgcc -lws2_32,“在调用编译器时添加以下标志”是std=c++11

不幸的是,我无法获得更多的信息,因为这是一台非常非常封闭的计算机。

一旦我回到家,我将在那里测试,并编辑任何新的信息。

测试文件:

代码语言:javascript
复制
#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;
}

在编译时,它会出现以下错误:

代码语言:javascript
复制
C:\Users\[REDACTED]\AppData\Local\Temp\ccQz3L9P.o:test.cpp:(.text+0x2f): undefined reference to `GetProcessImageFileNameA'

据我所知,它调用的是GetProcessImageFileNameA而不是GetProcessImageFileName,因为是psapi.h中的#define

代码语言:javascript
复制
#define GetProcessImageFileName __MINGW_NAME_AW(GetProcessImageFileName)

__MINGW_NAME_AW(func)_mingw_unicode.h中的#defined作为func##A,如果我正确理解,这就是新方法名称的来源。

psapi.h中,DWORD WINAPI GetProcessImageFileNameA(HANDLE, LPSTR, DWORD);是声明的,但我在任何地方都没有找到它的定义,开发-C++也不能。我很确定这就是问题所在。

我怎么才能修好它?我对任何事情都是开放的,包括切换编译器或IDE,只要我能把我使用的任何东西放在闪存盘上,并且尽可能少的烦扰地携带它,并且最终的结果不需要管理员特权来运行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-15 17:31:43

GetProcessImageFileName是一个windows函数,您需要在正确的库中链接才能到达它。

它被定义为宏,可以是GetProcessImageFileNameA,也可以是GetProcessImageFileNameW,这取决于您是编译"wide“还是”窄带“。

Win32 API有每个函数的Unicode和ascii版本(至少包含字符串的函数)。通常,ascii版本将字符转换为Unicode,并在内部调用其他注入。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33154710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档