MenüHomeBlogMagic

Solving: undefined reference to `SHGetKnownFolderPath'

Beim cross compile in Linux für Windows mit MinGW kann folgender Fehler auftreten:

...0x1d1a): undefined reference to `SHGetKnownFolderPath'

Dies ist bei mir geschehen, da MinGW 4.8.2 diese Funktioniert nicht implementiert hat.

Lösung 1

Die Lösung wäre also z.B. MinGW > 4.8.2 zu benutzen.
Damit wäre der volle Support von SHGetKnownFolderPath wieder verfügbar.

Lösung 2

Eine andere Lösung wäre die veraltete SHGetFolderPathW zu benutzen, z.B. so:

CcString sRet;
#if !defined(__GNUG__) || __GNUG__ > 4
PWSTR programdata;
if (S_OK == SHGetKnownFolderPath(FOLDERID_RoamingAppData, 0, nullptr, &programdata))
{
  sRet.fromUnicode(programdata, CcStringUtil::strlen(programdata));
  sRet.normalizePath();
}
#else
wchar_t szPath[MAX_PATH];
if(SUCCEEDED(SHGetFolderPathW(NULL, 
                           CSIDL_APPDATA, 
                           NULL, 
                           0, 
                           szPath))) 
{
  sRet.fromUnicode(szPath, CcStringUtil::strlen(szPath));
  sRet.normalizePath();
}
#endif

Nachteil dieser Geschichte ist, dass die CSIDL_XXX nicht alle Ordner abdecken, welche mit SHGetKnownFolderPath zu erreichen wären.
Wenn man allerdings nur die absoluten basics braucht, ist das ein gangbarer weg.

Permalink: https://adirmeier.de/Blog/ID_268
Tags: Blog, C/C++, Linux, MinGW, Windowsvon am 2019-07-11