由于____chkstk_darwin,在Catalina上使用部署10.10编译的MacOS应用程序在HighSierra版本<崩溃
MacOS App compiled with Deployment 10.10 on Catalina crashes on versions < HighSierra due to ____chkstk_darwin
我们有一个多平台桌面应用程序,它使用用C++编写的通用组件。 该组件使用 OpenSSL 和 PocoProject - 两者都静态链接到库中。
在macOS上 - 我们有一个用Objective-C编写的小框架 - 它本质上是C++代码的单个h/cpp包装器。它使 macOS 开发人员能够轻松使用该组件(使用 Swift(。 框架的XCode项目以及应用程序的XCode项目将DeploymentTarget设置为10.10(Yosemite(。
这种设置多年来一直运行良好 - 但是在将开发环境升级到Catalina(XCode版本11.14.1 - Apple clang版本11.0.3(clang-1103.0.32.59((后,我们现在面临着重大麻烦。
我们的应用程序在HighSierra,Sierra,El Capitain,Yosemite上运行时会严重崩溃(在Catalina上构建之后 - 部署目标为10.10(。
Code Type: X86-64 (Native)
Parent Process: bash [345]
Responsible: XXXCoreMacOSTestApp [845]
User ID: 501
Date/Time: 2020-05-18 21:45:43.354 +0200
OS Version: Mac OS X 10.13.6 (17G66)
Report Version: 12
Anonymous UUID: 2FE97D01-7DEF-32CB-E57B-CDFB7A600D8F
Sleep/Wake UUID: 68646DF3-E40E-463D-A390-E90F56D5EA6E
Time Awake Since Boot: 3200 seconds
Time Since Wake: 1700 seconds
System Integrity Protection: enabled
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Termination Reason: DYLD, [0x4] Symbol missing
Application Specific Information:
Performing @selector(Test:) from sender NSButton 0x7fcb724207a0
Dyld Error Message:
Symbol not found: ____chkstk_darwin
Referenced from: /Users/USER/Desktop/XXXCoreMacOSTestApp.app/Contents/MacOS/../Frameworks/XXXCoreMacOSWrapper.framework/Versions/A/XXXCoreMacOSWrapper
Expected in: /usr/lib/libSystem.B.dylib
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 dyld 0x0000000114a2f24a __abort_with_payload + 10
1 dyld 0x0000000114a2ebbc abort_with_payload_wrapper_internal + 89
2 dyld 0x0000000114a2ebe9 abort_with_payload + 9
3 dyld 0x0000000114a02482 dyld::halt(char const*) + 354
4 dyld 0x0000000114a025a9 dyld::fastBindLazySymbol(ImageLoader**, unsigned long) + 170
5 libdyld.dylib 0x00007fff7b8a3292 dyld_stub_binder + 282
6 ??? 0x0000000106a48000 0 + 4406411264
7 com.xxx.XXXCoreMacOSWrapper 0x00000001067af2e7 ssl3_write_bytes + 2871
8 com.xxx.XXXCoreMacOSWrapper 0x00000001067e52ad ssl3_do_write + 61
9 com.xxx.XXXCoreMacOSWrapper 0x00000001067dc057 state_machine + 1271
10 com.xxx.XXXCoreMacOSWrapper 0x000000010665cf58 Poco::Net::SecureSocketImpl::connectSSL(bool) + 328
11 com.xxx.XXXCoreMacOSWrapper 0x000000010665d29b Poco::Net::SecureSocketImpl::connect(Poco::Net::SocketAddress const&, Poco::Timespan const&, bool) + 203
12 com.xxx.XXXCoreMacOSWrapper 0x000000010666047c Poco::Net::SecureStreamSocketImpl::connect(Poco::Net::SocketAddress const&, Poco::Timespan const&) + 28
13 com.xxx.XXXCoreMacOSWrapper 0x00000001066aad06 Poco::Net::HTTPSession::connect(Poco::Net::SocketAddress const&) + 22
应用程序尝试动态加载/usr/lib/libSystem.B.dylib 并调用 chkstk (checkstack( 方法____chkstk_darwin。我想是编译器添加了这个检查?
我已经使用 oTool 检查了C++库 - 它们对共享库没有任何依赖。 我看到表单 oTool 它是添加此依赖项的 macOS 框架包装器。
我们的开发人员希望使用最新的 xcode/swift 版本 - 所以我们不想回到旧的 macOS/XCode 版本。
如何解决此问题?是否有任何编译器标志可以提供帮助?
问题在于OpenSSL和PocoProject的静态库是如何编译的。还需要在将部署目标设置为 10.10 的情况下编译它们。部署目标将阻止编译器插入对 chkstk 函数的调用。
更一般地说,必须使用设置的部署目标编译所有代码,以便成功部署到早于生成 OS 的操作系统版本。
直接调用编译器时,可以将-mmacosx-version-min=10.10
作为编译器选项传递以设置部署目标。或者,您可以将环境变量MACOSX_DEPLOYMENT_TARGET
设置为"10.10",以便编译器调用实现相同的目的。
- 试图在visual studio上用C++创建一个桌面应用程序
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 在C应用程序中运行C++(带有STL)函数
- 使用VerQueryValue检索应用程序的文件描述
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用调试/崩溃报告将应用程序部署到客户端
- C++控制台应用程序阻止退出
- 如何查询以确定我的 MacOS/X 应用程序是否处于应用程序午睡模式?
- 根据所选应用程序为 macOS 配置 VPN 拆分隧道
- 由于____chkstk_darwin,在Catalina上使用部署10.10编译的MacOS应用程序在HighSierra版本<崩溃
- 适用于 macOS 的 Xcode 应用程序。这就是我设置从USB麦克风输入获取音频的方式。一年前工作,现在没有了。为什么
- 在没有Xcode的macOS中开发具有依赖关系的应用程序
- 适用于 macOS 的 Qt 5.9.1 的系统托盘应用程序
- macOS 差异在“访达”和“终端”中运行应用程序
- MacOS应用程序文件关联
- 在 macOS 上的 Visual Studio 中创建C++控制台应用程序
- 如何在MacOS上使用根特权运行我的应用程序
- 仅在MacOS中的QlineEdit Consturctor中的设置上的应用程序崩溃
- 使用AWS-SDK-C 构建MacOS C 命令行应用程序
- 如何在命令行应用程序中检测堆栈溢出.在macos上用C++编写