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.