0

当我在 XCode 12.4 目标设备 iOS 13.3 中构建我的应用程序时,它会在启动时崩溃,并显示以下错误消息。但工作正常的目标设备模拟器。

dyld:找不到符号:___darwin_check_fd_set_overflow 引用自:/private/var/containers/Bundle/Application/EBA2D824-6239-4E6A-BD10-1A3F945AECA3/MyAPP.app/MyAPP 预期在:/usr/lib/libSystem.B.dylib 中/private/var/containers/Bundle/Application/EBA2D824-6239-4E6A-BD10-1A3F945AECA3/MyAPP.app/MyAPP dyld:启动,加载依赖库DYLD_LIBRARY_PATH=/usr/lib/system/introspection DYLD_INSERT_LIBRARIES=/Developer/usr/ lib/libBacktraceRecording.dylib:/Developer/usr/lib/libMainThreadChecker.dylib:/Developer/Library/PrivateFrameworks/DTDDISupport.framework/libViewDebuggerSupport.dylib:/Developer/Library/PrivateFrameworks/GPUTools.framework/libglInterpose.dylib:/usr/ lib/libMTLCapture.dylib

崩溃可以通过与 libSystem.B.dylib 的弱链接来解决,但我只是想知道为什么会发生这种情况。任何线索表示赞赏

4

1 回答 1

2

__darwin_check_fd_set_overflow,用作实现FD_SET和相关宏的一部分,仅适用于 iOS 14 及更高版本。它使用可用性注释声明,如果您将部署目标设置为 iOS 14 之前的版本,则该注释会导致它被弱链接。这允许它在为早期 iOS 版本构建的代码中使用,因为使用它的代码在运行时检查是否找到了定义。

int __darwin_check_fd_set_overflow(int, const void *, int) __API_AVAILABLE(macosx(11.0), ios(14.0), tvos(14.0), watchos(7.0));

如果您的部署目标未设置为旧版本,则符号将不会被弱链接,并且当动态加载程序未能按预期在 libSystem 中找到符号时,您将在运行时看到错误。

于 2021-06-24T00:24:48.087 回答