【问题标题】:iOS App backed with cpp dyld crashes with error "missing symbol called"支持 cpp dyld 的 iOS 应用程序崩溃并出现错误 \"missing symbol called\"
【发布时间】:2022-10-20 13:50:33
【问题描述】:

我有一个具有以下嵌套结构的 iOS 应用程序:

iOS App (swift + objC) { 
 iOS Framework (objC + C++) {
    dynamic library (C++) {
      static library (C++)
    } 
  } 
}

它成功链接并编译,但在运行时崩溃并出现错误“dyld [58599]:缺少符号调用”。崩溃发生在调用动态库中的代码时。导致崩溃的日志部分:

*

线程 3 名称:调度队列:sdf.export.queue 线程 3:0 dyld
0x108049274 __terminate_with_payload + 8 1 dyld 0x10804e6ec abort_with_with_pay_pay_payload_wrapper_internal + 136 2 dyld 0x10804e700 abort_with_with_with_with_pay_pay + 16 3 dyld 0x10801ea00_simm ysm y ylt _lt 4 apt 4 apt 4 apt + chalt(chalt + chalt + carnt + 5 dylt + and + and + 5;

请指教。我正在使用 Xcode 14.0 和 iOS 15.6.1

【问题讨论】:

  • 安德烈,我们无法提供这么少的信息。缺少什么符号?给你一些提示:你可以在产品目录中检查你的应用程序。进入Contents -> MacOS 中的二进制可执行文件,使用otool -L 进行依赖关系分析,以查看每个依赖关系是否都在应用程序包中。

标签: c++ ios dynamic-library missing-symbols


【解决方案1】:

显然,尝试在 iOS 上使用动态库是个坏主意——系统找不到它,您也无法将它及其依赖项放在您想要的位置。 LC_ID_DYLIB 的路径总是反映 Mac 上的路径,而不是 iOS 设备上的路径。

所以解决的办法就是把dylib转成框架,然后就可以嵌入成功了。我还注意到它需要嵌入到应用程序级别而不是内部框架(如问题中所述)级别。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 2019-06-04
    • 2022-12-14
    • 2020-04-15
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    相关资源
    最近更新 更多