ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

从零构建OpenSuperWhisper:CMake编译whisper.cpp、Cargo构建Rust自动纠错库到xcodebuild出包的完整流程

从零构建OpenSuperWhisper:CMake编译whisper.cpp、Cargo构建Rust自动纠错库到xcodebuild出包的完整流程 从零构建OpenSuperWhisperCMake编译whisper.cpp、Cargo构建Rust自动纠错库到xcodebuild出包的完整流程【免费下载链接】OpenSuperWhispermacOS dictation app项目地址: https://gitcode.com/gh_mirrors/op/OpenSuperWhisperOpenSuperWhisper 是一款开源的macOS 语音转写工具macOS dictation app按住快捷键说话Whisper 模型实时把语音转成文字。它由三部分构成Swift 编写的应用主体、C 的 whisper.cpp 语音识别引擎以及 Rust 编写的自动纠错库。本文将带你从零走通完整构建流程——CMake 配置、Cargo 编译、xcodebuild 打包一篇看懂这个语音转录项目是怎么长出来的。一、先认识项目结构三个零件如何拼成一个 App打开仓库你会看到三个关键目录它们对应构建流程中的三步目录/文件角色构建工具libwhisper/C 语音引擎whisper.cpp 子模块CMakeasian-autocorrect/Rust 亚洲语言自动纠错库autocorrect 子模块CargoOpenSuperWhisper/Swift 应用源码与 Xcode 工程xcodebuild两个第三方组件都以 Git 子模块形式引入定义在 .gitmodules 中libwhisper/whisper.cpp—— 本地推理 Whisper 语音转写模型的核心引擎asian-autocorrect—— 中日韩语音输入的自动纠错转写结果更地道理解这一点很重要clone 仓库只是拿到图纸子模块里的引擎源码需要单独初始化这也是新手最容易卡住的第一步。二、构建前准备一条命令装齐所有依赖在 Apple Silicon MacmacOS 14上准备工作很简单git clone https://gitcode.com/gh_mirrors/op/OpenSuperWhisper cd OpenSuperWhisper git submodule update --init --recursive brew install cmake libomp rust ruby gem install xcpretty逐项说明一下git submodule update --init --recursive拉取 whisper.cpp 和 Rust 纠错库源码漏掉这步后面所有编译都会报错cmake用来生成 C 引擎的 Xcode 工程libompOpenMP 运行库whisper.cpp 推理时需要动态链接它rust编译autocorrect-swift这个 Rust 动态库xcpretty把 xcodebuild 密密麻麻的输出格式化成人类可读的日志纯提升体验依赖全部就绪后其实只要运行 run.sh 一个脚本就能自动完成下面三步——但了解每一步在做什么排错时会从容得多。三、第一步CMake 编译 whisper.cpp 引擎run.sh 首先执行的配置命令是cmake -G Xcode -B libwhisper/build -S libwhisper含义很简单以 libwhisper/CMakeLists.txt 为输入用 Xcode 生成器把 C 工程输出到libwhisper/build目录。这个 CMakeLists 文件里藏着几个精心设计的细节cmake_minimum_required(VERSION 3.30)锁定特定版本是为了保证每次生成的 Xcode GUID 一致避免工程文件反复出现无意义 diffCMAKE_OSX_DEPLOYMENT_TARGET 14.0与 App 的最低系统要求macOS Sonoma对齐GGML_MATMUL_INT80编译宏显式关闭 i8mm 矩阵指令优化——较新的 Xcode 工具链下特性检测会通过但实际编译会失败这个宏就是为规避该问题而设CMake 配置成功后whisper.cpp 会作为 Xcode target 参与 App 的统一构建无需单独执行 make。四、第二步Cargo 构建 Rust 自动纠错库Rust 库 asian-autocorrect 需要单独编译产物是一个动态库。run.sh 中的构建命令如下CARGO_PROFILE_RELEASE_LTOtrue \ CARGO_PROFILE_RELEASE_CODEGEN_UNITS1 \ CARGO_PROFILE_RELEASE_STRIPsymbols \ CARGO_PROFILE_RELEASE_PANICabort \ cargo build -p autocorrect-swift --release \ --target aarch64-apple-darwin \ --manifest-pathasian-autocorrect/Cargo.toml四个环境变量都是瘦身优化最终产出的 dylib 更小参数作用LTOtrue链接期优化跨模块消除冗余代码CODEGEN_UNITS1单代码生成单元换取更优的编译结果STRIPsymbols剥离符号表减小体积PANICabortpanic 直接终止进程省略展开栈逻辑编译完成后还有两个关键收尾用install_name_tool把动态库的 ID 改成rpath/libautocorrect_swift.dylib让 App 能通过 rpath 稳定找到它用codesign --force --sign -做 ad-hoc 签名否则 macOS 会拒绝加载未签名的第三方动态库。另外libomp.dylib也会从 Homebrew 复制到构建目录并做同样的改 ID 签名处理——这解释了为什么依赖里必须有brew install libomp。五、第三步xcodebuild 打包出 App最后一步由 xcodebuild 完成run.sh 中已封装好完整参数xcodebuild -scheme OpenSuperWhisper \ -configuration Debug -jobs 8 \ -derivedDataPath build \ -destination platformmacOS,archarm64 \ CODE_SIGNING_ALLOWEDNO build几个值得注意的参数-destination platformmacOS,archarm64当前版本仅支持 Apple Silicon指定 arm64 避免 Intel 目标下 whisper.cpp 编译失败CODE_SIGNING_ALLOWEDNO本地构建跳过签名省去证书配置正式发行才需要签名-derivedDataPath build把产物统一放到build/目录方便定位配置run.sh build只构建不启动直接运行./run.sh则构建成功后自动去掉隔离属性quarantine并启动 App可以立刻按住快捷键体验语音转写。六、发行级构建签名、公证与出 DMG本地跑通只是起点。若要发布正式版项目提供了两条清晰的脚本链路notarize_app.shRelease 构建 代码签名 Apple 公证一条命令完成用法见 docs/release_build.mdmake_release.sh一键发布流水线——更新 Xcode 工程版本号、调用公证脚本、生成OpenSuperWhisper.dmg及其 SHA256 校验和、打包 dSYM 符号文件、打 git tag最后输出可直接提交 Homebrew 的 cask 片段也就是说从./run.sh的日常开发到make_release.sh 版本 签名身份的正式发版整条工具链在仓库内是完整闭环的。七、常见问题速查1. CMake 配置失败提示找不到 whisper.cpp十有八九是子模块没初始化回到仓库根目录执行git submodule update --init --recursive。2. 链接时报libomp.dylib缺失执行brew install libomprun.sh 会从其 Homebrew 路径拷贝到构建目录。3. xcodebuild 在 Intel Mac 上失败这是预期行为whisper.cpp 的优化编译目标限定 arm64请在 Apple Silicon 机器上构建。4. 想看 CI 是怎么构建的参考 .github/workflows/build.ymlCI 与本地脚本使用同一套流程是排障时最好的对照答案。结语回顾整条链路CMake 负责 C 引擎Cargo 负责 Rust 纠错库xcodebuild 负责 Swift 应用本体三者通过run.sh串成一条顺滑的开发体验。理解了这条混合语言构建流水线你不仅能为 OpenSuperWhisper 贡献代码也能把同样的思路迁移到任何 C/C/Rust/Swift 混合架构的 macOS 项目中。【免费下载链接】OpenSuperWhispermacOS dictation app项目地址: https://gitcode.com/gh_mirrors/op/OpenSuperWhisper创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表