未定义对 FOLDERID_.. 的引用 - C++

3

使用 g++ 将 C++ 代码从 Linux 编译到 Windows 时遇到错误。

错误信息:

undefined reference to `FOLDERID_RoamingTiles'
collect2: error: ld returned 1 exit status

我猜测我需要引用一个库,但我不知道它的名称。
如果是这种情况,我该如何找到我需要引用的库的名称,以便在未来发生类似情况时能够找到?
谢谢。

在官方文档 https://learn.microsoft.com/en-us/windows/win32/shell/knownfolderid 的最后,您会看到头文件:Knownfolders.h(Windows SDK的完整路径类似于%ProgramFiles(x86)%\Windows Kits\10\Include\10.0.19041.0\um\KnownFolders.h) - Simon Mourier
是的,我已经包含了这个头文件,但没有结果,我在想像g++中的-l选项一样的东西? - Mahmoud Hany
2
在包含 KnownFolders.h 之前,您需要 #define INITGUID#define INITKNOWNFOLDERS。如果没有定义任何预处理器符号,则 KnownFolders.h 标头仅声明 GUID,但不定义它们,这最终会导致您观察到的链接器错误。 - IInspectable
好的,看起来似乎已经可以工作了,但现在我发现mingw需要一些dll才能在Windows上运行,不管怎样,我认为这与此无关。无论如何,还是谢谢 :) - Mahmoud Hany
它们是从libuuid中导出的。链接到“-luuid”会比定义init符号(虽然这是计划B)更好。如果您没有libuuid,您将不得不进行一些挖掘;很难回答而不知道有关平台的更多详细信息(例如,某些Qt和MinGW安装配置将具有它,而其他一些则没有等等)。 - Jason C
我想强调作者的问题:“有什么方法可以找到我需要引用的库的名称?” 我在微软文档中找不到任何东西,只有头文件的要求。 - cwellm
1个回答

0

我正在使用msys2/gcc编译。链接到uuid有帮助。

g++ -luuid -o ....

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接