拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

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

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

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

【免费下载链接】OpenSuperWhispermacOS dictation app项目地址: https://gitcode.com/gh_mirrors/op/OpenSuperWhisper

OpenSuperWhisper 是一款开源的macOS 语音转写工具(macOS dictation app):按住快捷键说话,Whisper 模型实时把语音转成文字。它由三部分构成:Swift 编写的应用主体、C++ 的 whisper.cpp 语音识别引擎,以及 Rust 编写的自动纠错库。本文将带你从零走通完整构建流程——CMake 配置、Cargo 编译、xcodebuild 打包,一篇看懂这个语音转录项目是怎么"长"出来的。

一、先认识项目结构:三个"零件"如何拼成一个 App

打开仓库,你会看到三个关键目录,它们对应构建流程中的三步:

目录/文件角色构建工具
libwhisper/C++ 语音引擎(whisper.cpp 子模块)CMake
asian-autocorrect/Rust 亚洲语言自动纠错库(autocorrect 子模块)Cargo
OpenSuperWhisper/Swift 应用源码与 Xcode 工程xcodebuild

两个第三方组件都以 Git 子模块形式引入,定义在 .gitmodules 中:

  • libwhisper/whisper.cpp—— 本地推理 Whisper 语音转写模型的核心引擎
  • asian-autocorrect—— 中日韩语音输入的自动纠错,转写结果更地道

理解这一点很重要:clone 仓库只是拿到"图纸",子模块里的引擎源码需要单独初始化,这也是新手最容易卡住的第一步。

二、构建前准备:一条命令装齐所有依赖

在 Apple Silicon Mac(macOS 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 工程
  • libomp:OpenMP 运行库,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 一致,避免工程文件反复出现无意义 diff
  • CMAKE_OSX_DEPLOYMENT_TARGET 14.0:与 App 的最低系统要求(macOS Sonoma)对齐
  • GGML_MATMUL_INT8=0编译宏:显式关闭 i8mm 矩阵指令优化——较新的 Xcode 工具链下,特性检测会通过但实际编译会失败,这个宏就是为规避该问题而设

CMake 配置成功后,whisper.cpp 会作为 Xcode target 参与 App 的统一构建,无需单独执行 make。

四、第二步:Cargo 构建 Rust 自动纠错库

Rust 库 asian-autocorrect 需要单独编译,产物是一个动态库。run.sh 中的构建命令如下:

CARGO_PROFILE_RELEASE_LTO=true \ CARGO_PROFILE_RELEASE_CODEGEN_UNITS=1 \ CARGO_PROFILE_RELEASE_STRIP=symbols \ CARGO_PROFILE_RELEASE_PANIC=abort \ cargo build -p autocorrect-swift --release \ --target aarch64-apple-darwin \ --manifest-path=asian-autocorrect/Cargo.toml

四个环境变量都是"瘦身优化",最终产出的 dylib 更小:

参数作用
LTO=true链接期优化,跨模块消除冗余代码
CODEGEN_UNITS=1单代码生成单元,换取更优的编译结果
STRIP=symbols剥离符号表,减小体积
PANIC=abortpanic 直接终止进程,省略展开栈逻辑

编译完成后还有两个"关键收尾":

  1. 用install_name_tool把动态库的 ID 改成@rpath/libautocorrect_swift.dylib,让 App 能通过 rpath 稳定找到它;
  2. 用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 'platform=macOS,arch=arm64' \ CODE_SIGNING_ALLOWED=NO build

几个值得注意的参数:

  • -destination 'platform=macOS,arch=arm64':当前版本仅支持 Apple Silicon,指定 arm64 避免 Intel 目标下 whisper.cpp 编译失败
  • CODE_SIGNING_ALLOWED=NO:本地构建跳过签名,省去证书配置;正式发行才需要签名
  • -derivedDataPath build:把产物统一放到build/目录,方便定位

配置run.sh build只构建不启动;直接运行./run.sh则构建成功后自动去掉隔离属性(quarantine)并启动 App,可以立刻按住快捷键体验语音转写。

六、发行级构建:签名、公证与出 DMG

本地跑通只是起点。若要发布正式版,项目提供了两条清晰的脚本链路:

  • notarize_app.sh:Release 构建 + 代码签名 + Apple 公证,一条命令完成,用法见 docs/release_build.md
  • make_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 libomp,run.sh 会从其 Homebrew 路径拷贝到构建目录。

3. xcodebuild 在 Intel Mac 上失败?这是预期行为:whisper.cpp 的优化编译目标限定 arm64,请在 Apple Silicon 机器上构建。

4. 想看 CI 是怎么构建的?参考 .github/workflows/build.yml,CI 与本地脚本使用同一套流程,是排障时最好的对照答案。

结语

回顾整条链路: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),仅供参考

返回列表