Я разрабатывал приложение, построенное на Qt 5 в Ubuntu, в Qt Creator. Используемый формат проекта - CMake. Пришло время кросс-компилировать материал в двоичный файл, который может быть запущен в Windows. Итак, у меня есть
- установлен Clang и Mingw-W64
- создал файл цепочки инструментов CMake, указывающий на нужные инструменты (те, что из установленной цепочки инструментов MiGW) и установил целевую тройку равной
x86_64-w64-mingw32
(эта тройка используется, потому что она соответствует пути, где установлена цепочка инструментов gcc).
- скачал пакеты, начиная с
mingw64-qt
с https://dl.fedoraproject.org/pub/fedora/linux/development/30/Everything/x86_64/os/Packages/m/, распаковал их, объединил распакованные каталоги, удалил все ненужное, исправил сценарии CMake, чтобы они соответствовали путям в системе (есть жестко закодированные пути в сценариях).
- добавил пути к нужным каталогам распакованного Qt в файл цепочки инструментов, чтобы автообнаружение работало
- Пытался построить.
Когда я пытался собрать, некоторые файлы (6) моего проекта скомпилировались нормально, но 4 вызвали неприятные ошибки компиляции:
/usr/share/mingw-w64/include/rpcndr.h:64:11: error: reference to ‘byte’ is ambiguous
/usr/share/mingw-w64/include/objidlbase.h:2067:5: error: ‘byte’ has not been declared
ОК, подумал я, может MinGW-w64 в репозиториях Ubuntu гнилой? На самом деле это 6.0 в репозиториях Ubuntu, но на MinGW-w64 доступен сайт 8.1.
OK. Я удалил пакет, скачал https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/8.1.0/threads-posix/seh/x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z
, распаковал его, настроил файл набора инструментов для использования clang и clang ++ в качестве компиляторов и llvm binutils, установил sysroot, указывающий на распакованный dir, попытался восстановить ... и получил те же ошибки (но в новом sysroot).
Что ж, я пытался создать что-то более простое с точки зрения зависимостей и того, что известно для сборки g ++ - ниндзя.
Тот же результат. Я попытался тогда MinGW-w64 toolchain (версия для Windows) работать в Wine. Тот же результат. Черт.
Простое приложение hello world собирается и работает отлично во всех случаях.
Как создать кросс-приложение, более сложное, чем hello world для Windows, с помощью MinGW-w64 stdlib?
Также мне интересно, как настроить Qt Creator для правильного использования этого набора инструментов.