macOS 27 发布,seekdb 实现原生编译适配
0x00. 背景
2026 年 9 月,macOS 27 正式发布。
seekdb[1] 在 macOS 27 发布后第一时间完成了源码构建侧的适配:统一到新的 macOS 27 SDK 与本机 Apple 工具链,同时支持显式指定 Homebrew LLVM;已经在用的 Homebrew 发行包,也通过了 macOS 27 上的版本命令验证。
这篇文章想聊的是:如果你正好在 macOS 27 上用 seekdb,现在能不能用,应该怎么用,以及我们到底验证到了什么程度。

对大多数用户来说,系统大版本更新只是点一下“现在安装”。但对在 Mac 上写 C++ 的人,它几乎总会带来同一个熟悉的场面:昨天还能正常编译的工程,今天却因为种种奇葩的原因而编译不过了……
seekdb 这次要面对的,就是这样一个场面。
所以 seekdb 最近这次的改动[2],全部集中在构建与依赖这一层:新增一份 macOS 27 的依赖配置,把编译器从项目自带的 Clang 17 换成你机器上的 Apple 工具链,再补几处新编译器的兼容问题。改完之后,macOS 27 上的 seekdb 能正常编译,也能正常使用。

欢迎大家关注 OceanBase 社区公众号“老纪的技术唠嗑局”。在这里,我们会持续为大家更新与 #AI 和 #Data 相关的技术内容~
0x01. 开门见山,结论先行
- 只想用 seekdb:Homebrew 发行包已经可以在 macOS 27 上正常使用,不需要自己配置任何编译环境。
- 想从源码构建:适配分支已经支持 macOS 27 SDK 和本机的 Apple 工具链,也支持显式指定 Homebrew LLVM。

下面分别说这两条路怎么走。
最省事的一条路:Homebrew 直接装
如果你只是想在本机用起来,事情到这一条命令为止:
1 | brew tap oceanbase/seekdb |
你不需要 Xcode,不需要 Clang,也不需要关心我们在下面折腾的那些工具链细节。本次我们复核的是一个已经安装好的 seekdb 1.4.0.0 发行包,它在 macOS 27 上可以正常执行 seekdb --version 并输出正确的版本号。
需要说明的是:这个发行包来自 release/1.4.0 分支,构建于 2026 年 8 月 26 日,和本文后面提到的适配分支构建产物不是同一个东西。它们的版本号相同,但来源不同。
如果你要从源码构建
这次适配的核心动作,可以概括成一句话:把工具链从“项目自带”换成“用你机器上的”。
原来我们随项目下载并使用固定版本的 Clang 17,现在改为默认使用你机器上 Xcode 或 Command Line Tools 里的 Apple Clang;如果你想用 Homebrew LLVM,也给它留了开关。
准备好对应版本的 SDK 和开发依赖之后:
1 | bash build.sh release --init |
如果想用 Homebrew LLVM,在配置阶段指定它的路径:
1 | brew install llvm |
注意,即使指定了 Homebrew LLVM,SDK 和链接器仍然由 Apple 开发工具提供——我们只换编译器,不换系统头文件和链接器。
另外,配置阶段会真实地编译、链接一个包含 C++ 标准库的测试程序,提前把工具链兼容性问题暴露出来。也就是说,如果工具链不匹配,你在 --init 这一步就会知道,而不是编到一半才失败。
0x10. 刚发布的 macOS 27,又让构建挂了一回?
问题不是一处,而是三件东西混搭出来的:项目自带的 Clang 17、Xcode 26.2 的链接器、Command Line Tools 里的 macOS 27 SDK。
第一步卡在链接器上。旧链接器读不懂新 SDK 里的架构描述,CMake 在“检查这个编译器能不能用”的阶段就过不去了:
1 | tapi error: malformed file |
第二步卡在编译器上。就算你把链接器单独换掉,Clang 17 在编译 macOS 27 SDK 的 C++ 标准库头文件时,仍然会因为缺少 __builtin_clzg 这类内建能力而失败。
所以这次我们没有去打单点补丁,而是把编译器、SDK、链接器三件套统一到同一套 Apple 开发工具上。顺路还有一批新工具链带来的小兼容问题(Clang 诊断项、模板显式特化声明、OpenMP 参数、Boost MPL 的上游修复[3]、zstd 符号改用 Darwin 链接器处理等),细节都放在 PR 里。

一场“每年都来”的大考
这不是 seekdb 一个人的问题。任何在 macOS 上编译 C++ 的项目,每年系统大版本更新时都要过这一关:SDK、编译器、链接器这三件套里只要有一件换新,原来的组合就可能失效。
也正因为这样,我们这次没有选择“再换一个固定版本的编译器”,而是把工具链交回系统那一套——跟着系统走,明年再遇到这类更新,需要动的就更少。
0x11. 实测结果
本次实测组合是 macOS 27 + Apple Silicon(arm64)+ Apple Clang 21.0.0 + macOS 27 SDK + Apple 开发工具自带的链接器。

实测结果:
- 适配分支源码构建:
make seekdb -j16完整构建成功,重复执行的增量构建也通过; - 构建产物:arm64 可执行文件,
seekdb --version正常退出,版本为 1.4.0.0; - 已安装的 Homebrew 发行包:在 macOS 27 上正常执行
seekdb --version,版本同样为 1.4.0.0。
有几条约束需要说清楚:
- 系统要求 macOS 27 或更高,SDK 要求 ≥ 27,构建时会读取实际所选 SDK 的
SDKSettings.json校验版本; - Apple Clang 21.0.0 只是我们这次的实测版本,代码里没有写死版本:默认用系统里的 Apple Clang,也可以用
OB_MACOS_LLVM_ROOT指定 Homebrew LLVM; - 本次只验证了 arm64,Intel Mac 不在范围内;第三方库包暂时复用 macOS 15 的依赖仓库;
- 以上都是本机实测,不代表覆盖了所有 macOS 27 小版本和工具链组合。
更细的实现约束(链接器如何固定、新增了哪些依赖配置项等)都在 PR 里,这里就不展开了。

写在最后
这篇文章没有新特性,也没有性能数字,只有一句可能更实用的话:macOS 27 上,seekdb 现在可以原生跑了。
系统大版本更新打挂 C++ 工具链,是每年都会来一次的大考。这次的改动很小,小到一句话就能说完;我们做它,也不是因为这件事有多难,而是因为“本地开发”这件事不该被一次系统升级打断。
如果你在 macOS 27 上用 seekdb 遇到了别的问题,欢迎来 seekdb 的 GitHub Issues[4] 告诉我们~
参考资料
[1]
seekdb: https://github.com/oceanbase/seekdb
[2]
最近这次的改动: https://github.com/oceanbase/seekdb/pull/1400
[3]
Boost MPL 的上游修复: https://github.com/boostorg/mpl/pull/77
[4]
seekdb 的 GitHub Issues: https://github.com/oceanbase/seekdb/issues



往期内容推荐




了解更多

添加社区小助手,加入微信交流群~