Я пытаюсь получить приложение Qt для сборки из командной строки под Linux, предназначенное для Windows. Я использовал mxe для создания цепочки инструментов для таргетинга окон, но моя сборка не удалась из-за различных битов, связанных с потоками. mxe собран с winpthreads, и я знаю, что проект Qt будет построен на самих окнах изнутри создателя, используя предварительно упакованный компилятор mingw. Я успешно собираю, используя мой кросс-компилятор ARM Linux, поэтому я просто хочу, чтобы Windows делала то же самое. Я пытаюсь получить однострочную сборку на сервере сборки или от Дженкинса для всех моих целей.
Я предполагаю, что мне не хватает чего-то, что мне нужно передать в mxe при создании кросс-цепочки инструментов, или же пропускаю что-то, что мне нужно передать qmake для успешной сборки.
Проблема заключается в стандартной сборке MXE GCC, использующей потоки win32, а не реализацию mingws pthreads.
Отредактируйте src / gcc.mk и убедитесь, что winpthreads добавлен в список $ (PKG) _DEPS, а затем измените строку конфигурации таким образом, чтобы —enable-threads = win32 стал —enable-threads = posix.
Затем заново создайте winpthreads и gcc. Обратите внимание, что здесь есть циклическая зависимость, вам нужно сначала собрать gcc с потоками win32 (по умолчанию), ТОГДА переделать с winpthreads.
Спасибо Андреи Гаите за это — http://blog.worldofcoding.com/2014/05/cross-compiling-c11-without-going-madder.html
Конфигурация POSIX была добавлена в MXE (Сборка pthreads, встроенная в gcc, и включение дополнительных потоков posix в libgcc.).
Например, чтобы построить qt с этим (x64, shared, posix threads):
make MXE_TARGETS='x86_64-w64-mingw32.shared.posix' qt