#android #c #qt #build #static
#Android #c #qt #сборка #статический
Вопрос:
У меня возникла проблема при попытке собрать Qt 5.13.2 из исходного кода для Android. Я использовал PowerShell в Windows 10. Перед командой configure я установил путь JDK_ROOT:
set "JDK_ROOT=C:Program FilesJavajdk1.8.0_241bin
Эта команда настройки выполнена успешно:
..srcqt5configure -prefix E:QtStaticQt5.13.2Android -platform win32-g -opengl es2 -xplatform android-clang -android-sdk C:UsersuserAppDataLocalAndroidSdk -android-ndk C:UsersuserAppDataLocalAndroidSdkndk21.3.6528147 -nomake tests -nomake examples -opensource -confirm-license
После этого я выполняю:
mingw32-make -j4
и вскоре после запуска сборка останавливается с этим выводом в конце:
del ......liblibQt5Bootstrap.a 2>NUL
ar -rc ......liblibQt5Bootstrap.a @object_script.libQt5Bootstrap.Release
mingw32-make[4]: Leaving directory 'E:/Qt/Static/build-android/qtbase/src/tools/bootstrap'
mingw32-make[3]: Leaving directory 'E:/Qt/Static/build-android/qtbase/src/tools/bootstrap'
mingw32-make[2]: Leaving directory 'E:/Qt/Static/build-android/qtbase/src'
mingw32-make[1]: *** [Makefile:51: sub-src-make_first] Error 2
mingw32-make[1]: Leaving directory 'E:/Qt/Static/build-android/qtbase'
mingw32-make: *** [Makefile:87: module-qtbase-make_first] Error 2
Любое предложение или идея, почему сборка останавливается? Заранее спасибо.
ОБНОВЛЕНИЕ: то же самое происходит с Qt 5.14.2 и Qt 5.12.5
Комментарии:
1. Я чувствую, что фактическое сообщение об ошибке отсутствует в вашем выводе. Использование
-j4
полезно для ускорения сборки, но это действительно приводит к путанице в выводе, поскольку каждый процесс пытается выполнить запись в консоль одновременно. Попробуйте удалить-j4
, чтобы все строилось последовательно. Тогда вы сможете увидеть, в чем заключается реальная ошибка.2. @JarMan большое вам спасибо за ваш ответ. Мне было интересно, почему нет ошибки. Я постараюсь, как вы предложили, и опубликую обновление как можно скорее. Еще раз спасибо.
3. @JarMan это на самом деле решение. Без -j4 я успешно построил qt. Пожалуйста, удалите свой комментарий и опубликуйте его в ответе, чтобы я мог пометить его как решаемый. Большое вам спасибо.
Ответ №1:
В документации для make
говорится, что -j
опция указывает ему разделить работу на несколько «заданий», которые выполняются параллельно. Это полезно, потому что таким образом он завершается быстрее. Но вывод становится более запутанным, поскольку каждое задание записывается в одну и ту же консоль, и вы не можете легко определить, какой вывод поступает из какого задания. Поэтому, когда вы получаете ошибку компиляции, часто бывает трудно найти, что на самом деле представляет собой сообщение об ошибке. Поэтому, когда я получаю сообщение об ошибке, я обычно удаляю -j
параметр, чтобы вывод оставался последовательным, и я действительно мог его прочитать.
Примечание: Вы написали в комментариях, что простое удаление этой опции позволило qt успешно скомпилироваться, поэтому я пишу это как ответ. Но я действительно не знаю, почему это помогло бы. Возможно, есть что-то, что компилировалось не по порядку с несколькими заданиями. В любом случае, я рад, что этот ответ помог вам.
Комментарии:
1. да, я согласен с примечанием. Если я найду, в чем именно была проблема, я бы опубликовал обновление в комментариях.