在 mingw 下编译时出现 PathFindFileName 错误

Posted

技术标签:

【中文标题】在 mingw 下编译时出现 PathFindFileName 错误【英文标题】:error with PathFindFileName when compiling under mingw 【发布时间】:2012-05-30 17:44:59 【问题描述】:

代码:

#include <shlwapi.h>
int main() 
  TCHAR buffer[MAX_PATH];
  DWORD bufSize;
  GetModuleFileName(NULL, buffer, bufSize);
  TCHAR* out = PathFindFileName(buffer);

错误信息:

ccQzTh4t.o:pathfind.cpp:(.text.startup+0x40): undefined reference to `_imp__PathFindFileNameA@4'
collect2: ld returned 1 exit status

也许我忘记了一些包含?

【问题讨论】:

您所拥有的是链接器错误。可能您忘记链接相关库。 我猜你可能需要-lShlwapi fatal error: lshlwapi: No such file or directory 请注意命令行选项 Rsk82 前面的 -。它是-l 选项,后跟要链接的库的名称。 一些集成的编译器-链接器提供了非标准的方法来做到这一点(例如#pragma comment(lib, ...),但这通常是个坏主意。头文件用于编译器,库用于链接器。 【参考方案1】:

PathFindFileNameShlwapi.lib 库的一部分,您需要链接它。

【讨论】:

但是怎么样,不是吗?:#include &lt;shlwapi.h&gt; @rsk82:这是包含一个头文件,不同于在链接时包含一个库。 这包括函数的声明,Rsk82。编译器不会自动知道 定义 在哪里。对编译器来说,该头文件中的内容看起来像普通的函数声明,就像您可能自己声明的函数一样。 链接器 负责找出编译器看到程序使用的所有函数的实现的位置。 -l 选项告诉您的构建系统在给定库中查找未包含在主程序文本中的实现。 感谢您的回答,问题是这个参数在参数末尾的文件名之后:***.com/a/623270/393087

以上是关于在 mingw 下编译时出现 PathFindFileName 错误的主要内容,如果未能解决你的问题,请参考以下文章

在调试模式下编译时出现qrc_resource.cpp错误

Mingw 和 make 变量

在 Android 的发布模式下编译时出现 Xamarin Forms 错误 - 找不到与给定名称“Base.V21.Widget.Design.AppBarLayout”匹配的资源

在mingw环境下编译assimp

在mingw环境下编译assimp

mingw64下编译GLFW的Win64版本