неопределенная ссылка на FOLDERID_.. — C

#c #winapi

#c #winapi

Вопрос:

компиляция c из linux в Windows с использованием g и ошибка.

Ошибка:

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

Я предполагаю, что есть библиотека, на которую я должен ссылаться, но я не знаю, как она называется.

кроме того, если это так, какими способами я мог бы найти имя библиотеки, на которую я должен ссылаться, если это повторится в будущем?

Спасибо.

Комментарии:

1. В официальной документации docs.microsoft.com/en-us/windows/win32/shell/knownfolderid в самом конце документа вы увидите заголовочный файл: Knownfolders.h (полный путь к Windows SDK выглядит примерно так: %ProgramFiles(x86)%Windows Kits10Include10.0.19041.0umKnownFolders.h)

2. да, я уже включил этот файл заголовка без каких-либо результатов, я думал о чем-то вроде опции -l в g ?

3. Вы захотите #define INITGUID или #define INITKNOWNFOLDERS до включения KnownFolders.h . Если ни один из символов препроцессора не определен, заголовок KnownFolders.h просто объявляет GUID s, но не определяет их, что в конечном итоге приводит к ошибке компоновщика, которую вы наблюдали.

4. хорошо, это, похоже, сработало, но теперь я обнаружил, что mingw требует некоторой dll для запуска в Windows, в любом случае, я думаю, что это не связано. в любом случае спасибо 🙂

5. Они экспортируются из libuuid. Ссылка на -luuid была бы «правильным» способом, а не определением символов инициализации (хотя это план B). Если у вас нет libuuid, вам придется немного покопаться; трудно ответить, не зная более подробной информации о платформе (например, некоторые конфигурации установки Qt и MinGW будут иметь его, некоторые — нет и т.д.)