You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AddressSanitizer构建的命令行工具运行时出现符号缺失错误

问题:命令行工具运行时出现dyld缺失符号错误

终端运行编译后的命令行工具TPAutoConnect时出现如下输出:

rwelz@Big-Sur-Mac ~ % TPAutoConnect
TPAutoConnect(1963,0x1139b1600) malloc: nano zone abandoned due to inability to preallocate reserved vm space.
dyld[1963]: missing symbol called
zsh: abort      TPAutoConnect

崩溃日志堆栈跟踪:

Termination Reason:    Namespace DYLD, Code 4 Symbol missing
missing symbol called
(terminated at launch; ignore backtrace)

Thread 0 Crashed::  Dispatch queue: com.apple.main-thread
0   dyld                                   0x11397798e __abort_with_payload + 10
1   dyld                                   0x11398da72 abort_with_payload_wrapper_internal + 80
2   dyld                                   0x11398daa4 abort_with_payload + 9
3   dyld                                   0x11393b699 dyld4::halt(char const*) + 615
4   dyld                                   0x113958164 dyld4::APIs::_dyld_missing_symbol_abort() + 34
5   TPAutoConnect                          0x10ee0056b asan.module_ctor + 11
6   dyld                                   0x11396c911 invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const + 129
7   dyld                                   0x113963e26 invocation function for block in dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const + 557
8   dyld                                   0x113932db3 dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void (load_command const*, bool&) block_pointer) const + 129
9   dyld                                   0x113963bb7 dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const + 179
10  dyld                                   0x11396c342 dyld3::MachOAnalyzer::forEachInitializerPointerSection(Diagnostics&, void (unsigned int, unsigned int, unsigned char const*, bool&) block_pointer) const + 118
11  dyld                                   0x11396c5b4 dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const + 386
12  dyld                                   0x113945d82 dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const + 144
13  dyld                                   0x113945f0e dyld4::Loader::runInitializersBottomUp(dyld4::RuntimeState&, dyld3::Array<dyld4::Loader const*>&) const + 178
14  dyld                                   0x113945fb2 dyld4::Loader::runInitializersBottomUpPlusUpwardLinks(dyld4::RuntimeState&) const + 108
15  dyld                                   0x113959826 dyld4::APIs::runAllInitializersForMain() + 222
16  dyld                                   0x11393738d dyld4::prepare(dyld4::APIs&, dyld3::MachOAnalyzer const*) + 3443
17  dyld                                   0x1139364e4 start + 388

已尝试的操作:

  • 使用xcodebuild … -enableAddressSanitizer YES编译
  • 在Xcode中设置Other Linker Flags和Other C Flags为-fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fsanitize-address
  • 添加-shared-libasan链接标志
  • 组合使用上述所有标志

关键信息:使用Xcode 12.3在旧系统编译,在macOS 13.4.1上运行该程序。


解决方案

这个问题的核心是跨版本编译时AddressSanitizer(ASan)的兼容性不匹配:

  1. 问题根源
    Xcode 12.3附带的ASan库与macOS 13.4.1系统中的dyld/运行时不兼容。ASan是和Xcode版本绑定的,旧版本Xcode编译的ASan增强程序,无法在新版本macOS上正常加载所需符号,触发启动时崩溃。

  2. 修复步骤

    • 关闭ASan编译(优先推荐):如果不需要地址 sanitizer 功能,直接移除所有ASan相关编译/链接标志,重新编译程序:
      xcodebuild … -enableAddressSanitizer NO
      
      或者在Xcode项目设置中关闭Enable Address Sanitizer选项。
    • 匹配编译与运行环境:如果必须使用ASan,需要在与目标运行系统(macOS 13.4.1)对应的Xcode版本(如Xcode 14.3及以上)中编译程序,确保ASan库和系统运行时版本兼容。
    • 静态链接ASan(不推荐):macOS上ASan通常以动态库形式存在,静态链接可能引发其他兼容性问题,仅作为最后尝试方案。
  3. 额外说明
    malloc的nano zone警告是ASan加载失败的伴随现象,解决符号缺失问题后该警告会自动消失。


内容的提问来源于stack exchange,提问作者Robert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 10:14:57