From b63045477ea05c17f9abe9434e6d824453e3935a Mon Sep 17 00:00:00 2001 From: Michal Klocek Date: Mon, 13 Nov 2023 14:19:58 +0100 Subject: [PATCH] Fix android build Fix qt namespace issues: * qjniarray.h:339:30: error: no template named 'Traits'; * ld.lld: error: version script assignment of 'Qt_6' to symbol '_ZNTestQTNamespace114QReadWriteLock16destroyRecursiveEP21QReadWriteLockPrivate' failed: symbol not defined * same for _ZN16QNetworkDatagram7destroyEP23QNetworkDatagramPrivate * qtimezoneprivate_android.cpp:14:21: error: unknown type name 'TimeZone' * qandroidplatformclipboard.h:13:1: error: no template named 'Object' Change-Id: Ia5fc3990af4a4d762e194c7951727f8d5b10670e Reviewed-by: Volker Hilsheimer Reviewed-by: Qt CI Bot --- src/corelib/CMakeLists.txt | 7 ++++++- src/corelib/kernel/qjniobject.h | 2 ++ src/corelib/time/qtimezoneprivate_android.cpp | 1 + src/network/CMakeLists.txt | 8 ++++++-- src/plugins/platforms/android/qandroidplatformclipboard.h | 4 ++-- 5 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/corelib/CMakeLists.txt b/src/corelib/CMakeLists.txt index 79846a0858..59a34a314a 100644 --- a/src/corelib/CMakeLists.txt +++ b/src/corelib/CMakeLists.txt @@ -1460,6 +1460,11 @@ foreach(minor_version RANGE ${PROJECT_VERSION_MINOR}) string(APPEND linker_script_contents "${current} {} ${previous};\n") endif() endforeach() +if (QT_NAMESPACE STREQUAL "") + set(linker_script_symbol "_ZN14QReadWriteLock16destroyRecursiveEP21QReadWriteLockPrivate") +else() + set(linker_script_symbol "_ZN15${QT_NAMESPACE}14QReadWriteLock16destroyRecursiveEPNS_21QReadWriteLockPrivateE") +endif() qt_internal_extend_target(Core EXTRA_LINKER_SCRIPT_CONTENT "${linker_script_contents}" @@ -1469,5 +1474,5 @@ qt_internal_extend_target(Core # QFutureInterfaceBase::setContinuation(std::function, QFutureInterfaceBasePrivate*) "_ZN20QFutureInterfaceBase15setContinuationE*P27QFutureInterfaceBasePrivate" # QReadWriteLock::destroyRecursive(QReadWriteLockPrivate*) - "_ZN14QReadWriteLock16destroyRecursiveEP21QReadWriteLockPrivate" + ${linker_script_symbol} ) diff --git a/src/corelib/kernel/qjniobject.h b/src/corelib/kernel/qjniobject.h index 2c353ad137..73adb7140a 100644 --- a/src/corelib/kernel/qjniobject.h +++ b/src/corelib/kernel/qjniobject.h @@ -773,7 +773,9 @@ inline bool operator!=(const QJniObject &obj1, const QJniObject &obj2) // This cannot be included earlier as QJniArray is a QJniObject subclass, but it // must be included so that we can implement QJniObject::LocalFrame conversion. +QT_END_NAMESPACE #include +QT_BEGIN_NAMESPACE template template diff --git a/src/corelib/time/qtimezoneprivate_android.cpp b/src/corelib/time/qtimezoneprivate_android.cpp index 935a0cd745..05b4bd8cbc 100644 --- a/src/corelib/time/qtimezoneprivate_android.cpp +++ b/src/corelib/time/qtimezoneprivate_android.cpp @@ -7,6 +7,7 @@ #include #include +#include QT_BEGIN_NAMESPACE diff --git a/src/network/CMakeLists.txt b/src/network/CMakeLists.txt index 4437946ab5..9a616e0c34 100644 --- a/src/network/CMakeLists.txt +++ b/src/network/CMakeLists.txt @@ -400,11 +400,15 @@ qt_internal_extend_target(Network CONDITION WIN32 if(QT_FEATURE_private_tests) add_subdirectory(doc/snippets/network) endif() - +if (QT_NAMESPACE STREQUAL "") + set(linker_script_symbol "_ZN16QNetworkDatagram7destroyEP23QNetworkDatagramPrivate") +else() + set(linker_script_symbol "_ZN15${QT_NAMESPACE}16QNetworkDatagram7destroyEPNS_23QNetworkDatagramPrivateE") +endif() qt_internal_extend_target(Network # Workaround for QTBUG-118229: # Function called by inline methods taking a pointer to a private class as a parameter EXTRA_LINKER_SCRIPT_EXPORTS # QNetworkDatagram::destroy(QNetworkDatagramPrivate *d) - "_ZN16QNetworkDatagram7destroyEP23QNetworkDatagramPrivate" + ${linker_script_symbol} ) diff --git a/src/plugins/platforms/android/qandroidplatformclipboard.h b/src/plugins/platforms/android/qandroidplatformclipboard.h index e91252045b..0d31a17bd8 100644 --- a/src/plugins/platforms/android/qandroidplatformclipboard.h +++ b/src/plugins/platforms/android/qandroidplatformclipboard.h @@ -11,10 +11,10 @@ #ifndef QT_NO_CLIPBOARD -Q_DECLARE_JNI_CLASS(QtClipboardManager, "org/qtproject/qt/android/QtClipboardManager"); - QT_BEGIN_NAMESPACE +Q_DECLARE_JNI_CLASS(QtClipboardManager, "org/qtproject/qt/android/QtClipboardManager"); + class QAndroidPlatformClipboard : public QPlatformClipboard { public: