在Catalina上使用部署10.10编译的MacOS应用程序在版本上崩溃<;达尔文导致的高塞拉 我们有一个多平台的桌面应用程序,它使用C++编写的通用组件。 该组件使用OpenSSL和PocoProject,两者都静态链接到库中 P.>在ObjuleC中有一个小框架,它基本上是C++代码的单H/CPP包装器。它使macOS开发人员能够轻松地使用该组件(使用Swift)。 框架的XCode项目以及应用程序的XCode项目已将DeploymentTarget设置为10.10(约塞米蒂)
多年来,这种设置一直运行良好,但在将开发环境升级到Catalina(XCode版本11.14.1-Apple clang版本11.0.3(clang-1103.0.32.59))之后,我们现在面临着重大问题 我们的应用程序在HighSierra、Sierra、El Capitain、Yosemite(在Catalina上构建后,以10.10作为部署目标)上运行时发生严重崩溃 应用程序尝试动态加载/usr/lib/libSystem.B.dylib并调用chkstk(checkstack)方法。我猜是编译器添加了这个检查 <>我用OTooC++检查了C++库,它们对共享库没有任何依赖关系。 我从oTool中看到,是macOS框架包装器添加了这种依赖性 我们的开发人员希望使用最新的xcode/swift版本,所以我们不想回到旧的macOS/xcode版本在Catalina上使用部署10.10编译的MacOS应用程序在版本上崩溃<;达尔文导致的高塞拉 我们有一个多平台的桌面应用程序,它使用C++编写的通用组件。 该组件使用OpenSSL和PocoProject,两者都静态链接到库中 P.>在ObjuleC中有一个小框架,它基本上是C++代码的单H/CPP包装器。它使macOS开发人员能够轻松地使用该组件(使用Swift)。 框架的XCode项目以及应用程序的XCode项目已将DeploymentTarget设置为10.10(约塞米蒂),c++,objective-c,swift,xcode,macos,C++,Objective C,Swift,Xcode,Macos,多年来,这种设置一直运行良好,但在将开发环境升级到Catalina(XCode版本11.14.1-Apple clang版本11.0.3(clang-1103.0.32.59))之后,我们现在面临着重大问题 我们的应用程序在HighSierra、Sierra、El Capitain、Yosemite(在Catalina上构建后,以10.10作为部署目标)上运行时发生严重崩溃 应用程序尝试动态加载/usr/lib/libSystem.B.dylib并调用chkstk(checkstack)方法。我
我如何回避这个问题?是否有任何编译器标志可以提供帮助?问题在于如何编译OpenSSL和PocoProject的静态库。还需要将部署目标设置为10.10来编译它们。部署目标将阻止编译器插入对chkstk函数的调用 更一般地说,必须使用设置的部署目标编译所有代码,以便将其成功部署到早于构建操作系统的操作系统版本
直接调用编译器时,可以将
-mmacosx version min=10.10
作为编译器选项传递,以设置部署目标。或者,您可以将环境变量MACOSX\u DEPLOYMENT\u TARGET
设置为“10.10”,以便编译器调用实现相同的功能。听起来很合乎逻辑!现在在执行“export MACOSX_DEPLOYMENT_TARGET=10.10”之后重新编译openSSL和Poco……需要注意的一点是:当您使用早于SDK的部署目标进行构建时,编译器仍然知道晚于部署目标的API。因此,例如,配置脚本将找到它们。但它们将是弱进口的。当在早期版本的操作系统上实际运行时,它们将解析为NULL。如果代码不希望在运行时检查可用性,它将崩溃。
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