【问题标题】:dyld: Symbol not found: ___darwin_check_fd_set_overflowdyld:未找到符号:___darwin_check_fd_set_overflow
【发布时间】:2021-09-06 17:23:20
【问题描述】:

当我在 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 来解决崩溃,但我只是想知道为什么会发生这种情况。任何线索表示赞赏

【问题讨论】:

    标签: xcode dyld weak-linking libsystem


    【解决方案1】:

    __darwin_check_fd_set_overflow,用作FD_SET 和相关宏实现的一部分,仅适用于iOS 14 及更高版本。它使用可用性注释声明,应该导致它被弱链接 if 您构建时将部署目标设置为 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 中找到符号时,您将在运行时看到错误。

    【讨论】:

      猜你喜欢
      • 2023-02-13
      • 1970-01-01
      • 1970-01-01
      • 2019-04-02
      • 2014-08-15
      • 1970-01-01
      • 2020-11-06
      • 2020-11-25
      • 2015-05-02
      相关资源
      最近更新 更多