Множественные ошибки ссылок при создании приложения Qt 5.15 для Android
Приложение отлично работает с 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 const&)':
~/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, созданным из исходных кодов в докере. Есть идеи, в чем проблема и как ее исправить?
Рекомендации:
- Полный список ошибок: qgroundcontrol#9136 (комментарий)
- Проект: qgroundcontrol, ветка: android_build_fix_qt5.15
1 ответ
Проблема была в
-nostdlib++
исправление взлома в следующей строке: QGCCommon.pri#L60
QMAKE_LINK += -nostdlib++ # Hack fix
Для 5.15 нужно удалить и патчить
AndroidManifest.xml
правильно собрать APK. Эта строка могла быть удалена для версии 5.12, так как это была проблема ndk20, в то время как в настоящее время Qt Creator устанавливает и использует ndk21 по умолчанию.