Ошибки при построении приложения Qt 5.15 с несколькими ссылками для Android

#android #c #clang #linker-errors #qt5.15

#Android #c #лязг #компоновщик-ошибки #qt5.15

Вопрос:

Приложение отлично работает с Qt 5.12.9 для Android. Однако сбой с 5.15.1 на этапе компоновки (компилируется нормально, поскольку устаревший Qt API был исправлен). Сборка arm64-v8a только для ABI:

 qmake ANDROID_ABIS="arm64-v8a" ...
  

Есть ошибки с несколькими ссылками, подобные этой:

 ~/Qt/5.15.1/android/include/QtCore/qobjectdefs_impl.h:415: undefined reference to `operator delete(void*)'
obj/QGCMapEngine.o: In function `QList<QString>::append(QString constamp;)':
~/Qt/5.15.1/android/include/QtCore/qlist.h:626: undefined reference to `__cxa_begin_catch'
~/Qt/5.15.1/android/include/QtCore/qlist.h:628: undefined reference to `__cxa_rethrow'
~/Qt/5.15.1/android/include/QtCore/qlist.h:629: undefined reference to `__cxa_end_catch'
~/Qt/5.15.1/android/include/QtCore/qlist.h:644: undefined reference to `__cxa_begin_catch'
~/Qt/5.15.1/android/include/QtCore/qlist.h:646: undefined reference to `__cxa_rethrow'
~/Qt/5.15.1/android/include/QtCore/qlist.h:647: undefined reference to `__cxa_end_catch'
  

Пытался исправить AndroidManifest.xml , как указано здесь: Qt для Android известные проблемы, но безуспешно. Воспроизводимо с установленным последним Qt SDK и с Qt, созданным из исходных текстов в docker. Есть идеи, в чем проблема и как ее исправить?

Ссылки:

Ответ №1:

Проблема заключалась в -nostdlib исправлении взлома в следующей строке: QGCCommon.pri #L60

 QMAKE_LINK  = -nostdlib   # Hack fix
  

Для 5.15 необходимо удалить его и исправить AndroidManifest.xml , чтобы правильно собрать APK. Эта строка могла быть удалена для версии 5.12, а также была проблемой ndk20, в то время как в настоящее время Qt Creator устанавливает и использует ndk21 по умолчанию.