首页
/ Bitcoin Core 在 OpenBSD 上从源码构建完全指南:依赖安装、CMake 配置、编译测试与 ulimit 资源限制

Bitcoin Core 在 OpenBSD 上从源码构建完全指南:依赖安装、CMake 配置、编译测试与 ulimit 资源限制

2026-09-04 18:55:41作者:余洋婵Anita

本篇技术指南基于 Bitcoin Core 仓库自带的官方文档 OpenBSD Build Guide,完整覆盖在 OpenBSD 上构建 bitcoind、命令行工具及 GUI 的全流程:依赖安装、CMake 配置选项、编译与测试执行,以及 OpenBSD 特有的数据段(data segment)资源限制问题。读完本文,你将掌握在 OpenBSD 上从零完成 Bitcoin Core 构建的每一步操作,并能从源码层面理解项目针对 OpenBSD 平台做了哪些适配。

平台支持范围

Bitcoin Core 官方支持最近两个 OpenBSD 发行版,构建目标即最新发行版。这一点可以在 CI 的 OpenBSD 交叉编译配置中得到印证:ci/test/00_setup_env_openbsd_cross.sh 中固定了交叉编译目标与 SDK 版本:

export HOST=x86_64-unknown-openbsd
export OPENBSD_VERSION=7.9

即项目的自动化构建管线针对 OpenBSD 7.9 的 x86_64 平台做交叉编译验证。因此,在稍旧的发行版上构建可能缺少依赖库的新版本,建议始终使用最近的两个版本之一。

一、准备工作:安装依赖

以下所有安装命令均以 root 身份执行。

1. 基础构建依赖

pkg_add git cmake boost

这三个包分别提供版本管理、构建系统与 C++ 依赖库。根据 依赖清单,构建端最低要求为 CMake ≥ 3.22Boost ≥ 1.74;编译器方面要求 Clang ≥ 17.0GCC ≥ 12.1。OpenBSD 默认提供 Clang 工具链,通常满足要求。

SQLite 是钱包功能(wallet)的必需运行时依赖:

pkg_add sqlite3

SQLite 最低版本要求为 3.7.17。如果不需要钱包功能,可以在配置阶段用 -DENABLE_WALLET=OFF 关闭,此时无需安装 SQLite。

Cap'n Proto 用于进程间通信(IPC)功能,详见 multiprocess.md

pkg_add capnproto

Cap'n Proto 最低要求 0.7.1,IPC 还依赖 libmultiprocess(最低 v7.0-pre1)。如果不需要 IPC,可用 -DENABLE_IPC=OFF 关闭。

完整的依赖总览参见 依赖文档

2. 可选依赖

GUI 依赖

Qt6:Bitcoin Core 内置一个基于 Qt 框架的跨平台 GUI。要编译 GUI,需要 Qt 的相应组件和 libqrencode,并在配置时传 -DBUILD_GUI=ON

pkg_add qt6-qtbase qt6-qttools

Qt 最低要求为 6.2。值得注意的是,CMake 的 Qt 查找逻辑专门为 OpenBSD 做了适配——OpenBSD 上 Qt6 的安装路径布局要求额外的 PATH_SUFFIXES 才能被 find_package 发现,见 FindQt.cmake

find_package(Qt${Qt_FIND_VERSION_MAJOR} ${Qt_FIND_VERSION}
  COMPONENTS ${Qt_FIND_COMPONENTS}
  HINTS ${_qt_homebrew_prefix}
  PATH_SUFFIXES Qt${Qt_FIND_VERSION_MAJOR}  # Required on OpenBSD systems.
)

libqrencode:GUI 会将地址编码为二维码(QR code)。除非显式禁用,否则默认启用:

pkg_add libqrencode

若不需要 QR 编码支持,配置时传 -DWITH_QRENCODE=OFF 关闭该特性。

通知功能:ZeroMQ

Bitcoin Core 可通过 ZeroMQ 对外发送通知(如链头变更、内存池事件)。编译 ZMQ 支持需安装依赖并传 -DWITH_ZMQ=ON

pkg_add zeromq

ZeroMQ 最低版本 4.0.0。从源码可以看到 OpenBSD 平台上 ZMQ 还有一个特殊适配点:在 zmqpublishnotifier.cpp 中,当绑定地址不是 IPv6 时,ZMQ_IPV6 选项必须保持关闭,否则在 OpenBSD 上会失败:

// On some systems (e.g. OpenBSD) the ZMQ_IPV6 must not be enabled, if the address to bind isn't IPv6
const int enable_ipv6 { IsZMQAddressIPV6(address) ? 1 : 0};
rc = zmq_setsockopt(psocket, ZMQ_IPV6, &enable_ipv6, sizeof(enable_ipv6));

这一行为已由项目内置处理,使用者无需额外干预。

测试套件依赖

仓库自带测试套件,开发时验证代码改动很有用。运行测试需要 Python 3:

pkg_add python py3-zmq  # 如有需要,请选择最新版本的 python 包

Python 最低要求 3.10。

二、获取源码

将 Bitcoin Core 仓库克隆到本地目录,之后所有构建脚本和命令都在该目录下执行:

git clone https://gitcode.com/GitHub_Trending/bi/bitcoin

三、配置构建

Bitcoin Core 使用 CMake 配置。常见示例:

启用钱包和 GUI(假设 SQLite 和 Qt6 已安装):

cmake -B build -DBUILD_GUI=ON

使用 cmake -B build -LH 可以查看完整的可用配置选项列表,包括 -DENABLE_WALLET-DENABLE_IPC-DWITH_QRENCODE-DWITH_ZMQ 等。

四、编译与测试

cmake --build build     # 追加 "-j N" 指定 N 个并行任务
ctest --test-dir build  # 追加 "-j N" 指定 N 个并行测试

ctest 执行的是单元测试套件(src/test 目录下的 290+ 个测试文件)。

五、OpenBSD 资源限制(ulimit)与内存不足问题

这是 OpenBSD 上构建时最容易踩的坑。若构建中出现 out-of-memory 错误,本节内容可以解决问题。

OpenBSD 的标准 ulimit 限制非常严格:

data(kbytes)         1572864

遗憾的是,这个 1.5GB 的数据段上限在某些情况下不足以编译项目中的部分 .cpp 文件。如果当前用户属于 staff 组,可以用以下命令临时提升限制:

ulimit -d 3000000

该修改只影响当前 shell 及其派生的进程。若要系统级生效,需要修改 /etc/login.conf 中的 datasize-curdatasize-max 两项,然后重启系统。

从源码结构看,数据段压力主要来自大型 C++ 编译单元。项目中针对 BSD 家族(FreeBSD/OpenBSD/DragonFly)有多处编译期分支,例如 threadnames.cpp 在 OpenBSD 上通过 pthread_set_name_np 设置线程名、randomenv.cpp 需要 extern char** environ 声明、system.cpp 跳过了 glibc 特有的 locale 回退逻辑。这类平台分支意味着 OpenBSD 构建走的是与 Linux 不同的条件编译路径,编译器和 CMake 必须正确识别 __OpenBSD__ 宏,否则会出现链接或运行期行为差异。

此外,src/secp256k1/cmake/SetLibtoolAbiVersion.cmake 中对 OpenBSD 也做了专门的共享库 ABI 版本处理——OpenBSD 的 libtool 没有定义 soname_spec,构建脚本会显式生成完整的版本化文件名(如 libsecp256k1.so.6.2)和符号链接链,与 GNU Autotools 构建行为保持一致。

GUI 构建方面,src/qt/CMakeLists.txt 同样把 OpenBSD 与 Linux、FreeBSD 归为一类:在静态链接 Qt 库时,OpenBSD 上需要额外导入 XCB 平台插件(Qt6::QXcbIntegrationPlugin)以支持 X11 窗口。这解释了为什么 GUI 依赖一节只要求安装 qt6-qtbase,而无需在构建脚本中手工处理平台插件——CMake 已经按 CMAKE_SYSTEM_NAME 自动分发了。

关键操作速查表

步骤 命令 说明
基础依赖 pkg_add git cmake boost 构建必需
钱包 pkg_add sqlite3 无钱包则 -DENABLE_WALLET=OFF
IPC pkg_add capnproto 无 IPC 则 -DENABLE_IPC=OFF
GUI pkg_add qt6-qtbase qt6-qttools libqrencode 无 GUI 则省略,无 QR 则 -DWITH_QRENCODE=OFF
通知 pkg_add zeromq 配合 -DWITH_ZMQ=ON
测试 pkg_add python py3-zmq Python ≥ 3.10
配置 cmake -B build -DBUILD_GUI=ON 选项全量:cmake -B build -LH
编译 cmake --build build -j N 并行编译
测试 ctest --test-dir build -j N 并行测试
数据段限制 ulimit -d 3000000 仅限当前 shell;系统级改 /etc/login.conf

小结

在 OpenBSD 上构建 Bitcoin Core 的流程与项目其他 Unix 平台一致:pkg_add 安装依赖 → cmake -B build 配置 → cmake --build build 编译 → ctest 验证。与 Linux 平台相比,OpenBSD 的核心差异点只有两个:一是 GUI 的 Qt6 查找路径需要 PATH_SUFFIXES 适配(CMake 已内置处理),二是严格的数据段 ulimit 可能导致大型编译单元 OOM,需要用 ulimit -d 或修改 /etc/login.conf 放宽限制。项目源码中对 OpenBSD 的条件编译分支(线程命名、环境采集、ZMQ IPv6 处理、secp256k1 共享库命名等)表明这是一个被持续维护的一等支持平台。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.12 K
2.72 K
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
904
1.82 K
docsdocs
暂无描述
Markdown
889
5.78 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
854
1.34 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
527
590
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.52 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.33 K
1.45 K
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
540
384
flutter_flutterflutter_flutter
本仓库是 Flutter SDK 与 Flutter Engine 的 OpenHarmony 适配版本,由 CPF-Flutter 团队维护。开发者可使用熟悉的 Flutter 技术栈开发 OpenHarmony 应用,3.35.7 及以后的适配版本可基于本仓库源码构建支持 OpenHarmony 的 Flutter Engine。
Dart
1.17 K
341