XZ_iOS之libBacktraceRecording.dylib错误的解决

本文介绍了一种iOS应用在真机上出现闪退的问题及其解决方案。问题源于启用了后台追踪记录导致,通过禁用该功能成功解决了闪退现象。
部署运行你感兴趣的模型镜像
dyld: could not load inserted library '/Developer/usr/lib/libBacktraceRecording.dylib' because no suitable image found.  Did find:
/Developer/usr/lib/libBacktraceRecording.dylib: code signature invalid for '/Developer/usr/lib/libBacktraceRecording.dylib'

Message from debugger: Terminated due to signal 6


程序可以运行到真机上,但是,刚运行结束就闪退了,

您正在运行(可能是一个调试版本)启用了后台追踪记录(enabled backtrace recording),将它禁用掉就解决了。即将下图中,红色圈中部分的勾去掉即可。





您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

你遇到的错误: ```text OSError: cannot load library '/.../_soundfile_data/libsndfile.dylib': dlopen(... no such file) Additionally, ctypes.util.find_library() did not manage to locate a library called 'sndfile' ``` 这个报错来自 `PySoundFile`(即 `soundfile` 模块)在尝试加载 `libsndfile` 动态库时失败。我们来 **系统性地排查并解决这个问题**。 --- ## 🔍 一、问题本质分析 Python 的 `soundfile` 模块依赖 C 库 `libsndfile`,但它本身不自带二进制文件(`.dylib` / `.so` / `.dll`),所以它会按以下顺序尝试加载: 1. ❌ 尝试用 `ctypes.util.find_library('sndfile')` 找系统里的 `libsndfile` 2. ❌ 失败后回退到内置路径:`_soundfile_data/libsndfile.dylib` 3. ❌ 如果 `_soundfile_data/` 目录不存在或没有 dylib → 报错 “no such file” 你现在的问题是: > ✅ Homebrew 已安装 `libsndfile` > ✅ 文件 `/opt/homebrew/opt/libsndfile/lib/libsndfile.dylib` 存在 > ❌ 但 Python 不知道去哪找它,且 `_soundfile_data` 路径为空 → 导致双重失败! --- ## ✅ 二、完整排查流程(一步步验证) ### ✅ 步骤 1:确认 `libsndfile.dylib` 是否真实存在 运行: ```bash ls -l /opt/homebrew/opt/libsndfile/lib/libsndfile.dylib ``` ✅ 正确输出应类似: ``` -rwxr-xr-x 1 didi admin 1986560 Aug 1 10:00 /opt/homebrew/opt/libsndfile/lib/libsndfile.dylib ``` 📌 记住这个路径,后面要用。 --- ### ✅ 步骤 2:检查是否能被 `dlopen` 加载(手动测试) 在 Python 中直接尝试加载 dylib: ```python from ctypes import CDLL CDLL("/opt/homebrew/opt/libsndfile/lib/libsndfile.dylib") ``` 运行: ```bash python -c "from ctypes import CDLL; CDLL('/opt/homebrew/opt/libsndfile/lib/libsndfile.dylib'); print('🎉 成功加载!')" ``` - ✅ 成功 → 说明 dylib 可用,只是 `soundfile` 没找到 - ❌ 失败 → 报错可能是权限、架构不匹配、SIP 屏蔽等 --- ### ✅ 步骤 3:检查 `_soundfile_data` 目录是否存在 运行: ```bash ls -l /Users/didi/.pyenv/versions/3.9.20/lib/python3.9/site-packages/_soundfile_data/ ``` 可能结果: - ❌ `No such file or directory` → 安装的 wheel 不包含二进制 - ✅ 存在但无 `.dylib` → 不完整包 👉 结论:你用 `pip install soundfile` 安装的是一个 **纯 Python 包**,没有捆绑 dylib。 --- ### ✅ 步骤 4:检查当前环境变量 `DYLD_LIBRARY_PATH` 运行: ```bash echo $DYLD_LIBRARY_PATH ``` 你应该看到包含: ``` /opt/homebrew/lib ``` 如果没有,请设置: ```bash export DYLD_LIBRARY_PATH="/opt/homebrew/lib:$DYLD_LIBRARY_PATH" ``` ⚠️ 注意:**macOS SIP 会屏蔽 `DYLD_*` 给非系统 Python**(如 pyenv 安装的),所以即使设置了也可能无效! --- ### ✅ 步骤 5:验证 `find_library('sndfile')` 是否工作 运行这段代码: ```python import ctypes.util print(ctypes.util.find_library('sndfile')) ``` 执行: ```bash python -c " import ctypes.util print('find_library:', ctypes.util.find_library('sndfile')) " ``` - ✅ 输出路径(如 `/opt/homebrew/lib/libsndfile.dylib`)→ 正常 - ❌ 输出 `None` → 问题根源在此! 📌 原因:`find_library()` 只搜索系统默认路径(如 `/usr/lib`),而 Homebrew 在 `/opt/homebrew`,不在搜索范围内。 --- ## 🚀 三、终极解决方案(推荐) ### ✅ 方案:**手动预加载 dylib** 在任何导入 `soundfile` 之前,强制加载 dylib: ```python # patch_soundfile.py 或写在脚本最前面 import os from ctypes import CDLL # 设置 libsndfile 路径 LIB_PATH = "/opt/homebrew/opt/libsndfile/lib/libsndfile.dylib" if not os.path.exists(LIB_PATH): raise FileNotFoundError(f"找不到 libsndfile.dylib: {LIB_PATH}") CDLL(LIB_PATH) # 强制加载 print(f"✅ 已加载 {LIB_PATH}") # 现在再导入 soundfile 就不会出错了 import soundfile as sf ``` 📌 这个方法完全绕过 `find_library` 和 `_soundfile_data`,100% 可靠! --- ### ✅ 测试是否修复成功 保存为 `test.py`: ```python import os from ctypes import CDLL LIB_PATH = "/opt/homebrew/opt/libsndfile/lib/libsndfile.dylib" if os.path.exists(LIB_PATH): CDLL(LIB_PATH) print("✅ 动态库已加载") import soundfile as sf import numpy as np # 写一个测试音频 sf.write("hello.wav", np.zeros(24000), 24000) print("🎉 成功生成 hello.wav!") ``` 运行: ```bash python test.py ``` ✅ 成功生成文件 → 修复完成! --- ## 🧩 四、长期建议(避免复现) | 方法 | 推荐度 | 说明 | |------|--------|------| | ✅ 手动 `CDLL()` 预加载 | ⭐⭐⭐⭐⭐ | 最可靠,不受 SIP 影响 | | ✅ 使用 Conda/Mamba | ⭐⭐⭐⭐☆ | 自动处理依赖和 dylib 路径 | | ⚠️ 设置 `DYLD_LIBRARY_PATH` | ⭐⭐☆☆☆ | 在 pyenv 下经常被 SIP 忽略 | | ❌ 依赖 `_soundfile_data` | ⭐☆☆☆☆ | macOS ARM64 上几乎总是空 | --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值