Executorch苹果iOS示例编译失败:M1设备Xcode构建报错
我使用搭载M1 Pro处理器的2021款MacBook Pro,在通过Xcode构建Executorch的apple-ios示例应用时遇到问题。打开Xcode项目后,LLaMaRunner中出现两个未定义符号错误:
未定义符号: executorch::extension::llm::load_tokenizer(std::__1::basic_string<char, std::__1::char_traits, std::1::allocator> const&, std::1::unique_ptr<std::1::vector<std::1::basic_string<char, std::__1::char_traits, std::1::allocator>, std::1::allocator<std::__1::basic_string<char, std::__1::char_traits, std::1::allocator>>>, std::1::default_delete<std::1::vector<std::1::basic_string<char, std::__1::char_traits, std::1::allocator>, std::1::allocator<std::__1::basic_string<char, std::__1::char_traits, std::1::allocator>>>>>, std::1::optional<std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator>>, unsigned long, unsigned long)
未定义符号: executorch::extension::llm::create_text_llm_runner(std::__1::basic_string<char, std::__1::char_traits, std::1::allocator> const&, std::1::unique_ptr<tokenizers::Tokenizer, std::__1::default_deletetokenizers::Tokenizer>, std::1::optional<std::1::basic_string<char, std::__1::char_traits, std::__1::allocator> const>, float)
系统及依赖版本信息
PyTorch版本: 2.8.0.dev20250601 是否为调试构建: 否 构建PyTorch使用的CUDA: 无 构建PyTorch使用的ROCM: 不适用 操作系统: macOS 15.5 (arm64) GCC版本: 无法收集 Clang版本: 17.0.0 (clang-1700.0.13.5) CMake版本: 3.31.6 Libc版本: 不适用 Python版本: 3.12.11 (main, Jun 3 2025, 15:41:47) [Clang 17.0.0 (clang-1700.0.13.3)] (64位运行时) Python平台: macOS-15.5-arm64-arm-64bit CUDA是否可用: 否 CUDA运行时版本: 无CUDA CUDA_MODULE_LOADING设置为: 不适用 GPU型号及配置: 无CUDA Nvidia驱动版本: 无CUDA cuDNN版本: 无CUDA HIP运行时版本: 不适用 MIOpen运行时版本: 不适用 XNNPACK是否可用: 是 CPU: Apple M1 Pro 相关库版本: [pip3] executorch==0.7.0a0+56392aa [pip3] numpy==2.3.0 [pip3] pytorch_tokenizers==0.1.0 [pip3] torch==2.8.0.dev20250601 [pip3] torchao==0.12.0+gitbc68b11f [pip3] torchaudio==2.8.0.dev20250601 [pip3] torchdata==0.11.0 [pip3] torchsr==1.0.4 [pip3] torchtune==0.6.1 [pip3] torchvision==0.23.0.dev20250601 [conda] 无法收集
解决建议
- 重新运行Executorch iOS示例的构建脚本,确保LLM扩展模块已完整编译,生成的库文件被正确添加到Xcode项目的链接阶段。
- 检查Xcode项目的
Link Binary With Libraries配置,确认是否包含了libexecutorch_extension_llm.a或对应框架文件。 - 验证依赖版本匹配:当前使用的是Executorch开发版,尝试切换到与PyTorch nightly版本匹配的稳定分支,或同步更新所有相关依赖库。
- 确认构建时是否开启了LLM扩展的编译选项,部分示例需要显式指定编译扩展模块才能生成相关符号。
内容的提问来源于stack exchange,提问作者alirek

