Details
-
Bug
-
Resolution: Invalid
-
Not Evaluated
-
None
-
5.12.4
-
None
Description
Build with SDK 10.13
xcrun --show-sdk-version 10.13
kernel/qcore_mac_objc.mm:147:13: error: use of undeclared identifier 'backtrace_from_fp' if (backtrace_from_fp(__builtin_frame_address(0), &frame, 1)) ^ 1 error generated.
SDK 10.13 need for static build with target 10.13.
Application not linked with static builded Qt from SDK 10.14 - error linking function not existed on the platform 10.13. Shared Qt worked with week linked function!
Problem in the QMacAutoReleasePool::QMacAutoReleasePool()
: pool([[NSAutoreleasePool alloc] init]) with backtrace_from_fp - not exists in the SDK 10.13
QMacAutoReleasePool::QMacAutoReleasePool() : pool([[NSAutoreleasePool alloc] init]) { Class trackerClass = [QMacAutoReleasePoolTracker class]; #ifdef QT_DEBUG void *poolFrame = nullptr; if (__builtin_available(macOS 10.14, iOS 12.0, tvOS 12.0, watchOS 5.0, *)) { void *frame; if (backtrace_from_fp(__builtin_frame_address(0), &frame, 1)) poolFrame = frame; } else { static const int maxFrames = 3; void *callstack[maxFrames]; if (backtrace(callstack, maxFrames) == maxFrames) poolFrame = callstack[maxFrames - 1]; }
Workaround in the attached patch file - made by pattern in this file below in the function bool qt_mac_applicationIsInDarkMode() - add preprocessor quard for exclude code for new platform
QMacAutoReleasePool::QMacAutoReleasePool() : pool([[NSAutoreleasePool alloc] init]) { Class trackerClass = [QMacAutoReleasePoolTracker class]; #ifdef QT_DEBUG void *poolFrame = nullptr; #if QT_DARWIN_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_10_14, __IPHONE_12_0, __TVOS_12_0, __WATCHOS_5_0) if (__builtin_available(macOS 10.14, iOS 12.0, tvOS 12.0, watchOS 5.0, *)) { void *frame; if (backtrace_from_fp(__builtin_frame_address(0), &frame, 1)) poolFrame = frame; } else { static const int maxFrames = 3; void *callstack[maxFrames]; if (backtrace(callstack, maxFrames) == maxFrames) poolFrame = callstack[maxFrames - 1]; } #else static const int maxFrames = 3; void *callstack[maxFrames]; if (backtrace(callstack, maxFrames) == maxFrames) poolFrame = callstack[maxFrames - 1]; #endif
Attachments
Issue Links
- relates to
-
QTBUG-122259 [Mac OS] How to build Qt 5.15.11 with threaded opengl support
- Open