首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
SerenityOS 中 Ladybird 浏览器的完整构建指南:依赖、CMake 配置与多平台调试
📅 2026/9/11 1:42:09
✍️ 爱科研究院
👁 阅读 3,247
SerenityOS 中 Ladybird 浏览器的完整构建指南依赖、CMake 配置与多平台调试【免费下载链接】serenityThe Serenity Operating System 项目地址: https://gitcode.com/GitHub_Trending/se/serenityLadybird 是基于 SerenityOS 自有 LibWebWeb 渲染引擎与 LibJSJavaScript 引擎打造的跨平台浏览器本文档为当前仓库内随 SerenityOS 保留的 Ladybird 版本提供从零到可运行的完整构建指引。读完本文你将掌握各主流 Linux 发行版、macOS、NixOS 乃至 OpenIndiana、Haiku 上的依赖安装方法能够通过serenity.sh一键构建运行也能使用独立 CMake 构建目录完成打包级构建并在 CLion 与 Xcode 中进行源码级调试。Ladybird 与当前仓库的关系[!NOTE] Ladybird 浏览器项目已迁移至独立的 LadybirdBrowser/ladybird 仓库本仓库中的这份副本是为方便开发 SerenityOS 自带的 LibWeb 与 LibJS 库而保留的。因此本指南所描述的一切构建行为最终服务于一个目的在宿主操作系统而非 SerenityOS 虚拟机内上直接编译并运行基于 LibWeb 与 LibJS 的浏览器前端用于验证和调试这两个库的实现。从 Ladybird/README.md 可以看到Ladybird 采用多进程架构一个主 UI 进程多个 WebContent 渲染进程外加 ImageDecoder图像解码、RequestServer网络请求与 SQLServerCookie 存储等辅助进程图像解码与网络连接均被隔离在独立进程中以增强对恶意内容的防御每个标签页拥有独立的沙箱化渲染进程。这些辅助进程的构建目标定义位于 Ladybird/CMakeLists.txt。构建前置条件编译器与 Qt6Ladybird 对工具链有明确要求需要 Qt6 开发包以及一个支持 C26 的编译器。最低要求为 g-14 或 clang-17低于此版本将无法通过 C26 相关的编译检查。仓库的 Lagom宿主构建系统通过 Meta/CMake/lagom_options.cmake 统一暴露构建开关其中与 Ladybird 直接相关的选项包括CMake 选项默认值说明BUILD_LAGOMOFF是否将系统各部分编译为面向宿主 OS 的版本用于测试/模糊测试ENABLE_LAGOM_LIBWEBON是否为 Lagom 构建编译 LibWebENABLE_LAGOM_LADYBIRDOFF是否从 Lagom 编译 LadybirdENABLE_QTAPPLE 平台 OFF其余 ON是否使用 Qt GUI 构建 Ladybird 应用注意 Meta/Lagom/CMakeLists.txt 中的依赖关系一旦开启ENABLE_LAGOM_LADYBIRD系统会强制将ENABLE_LAGOM_LIBWEB置为 ON因为 Ladybird 必然依赖 LibWeb。各平台依赖安装Debian / Ubuntusudo apt install build-essential cmake libgl1-mesa-dev ninja-build qt6-base-dev qt6-tools-dev-tools ccacheUbuntu 20.04 及以上版本还需确保 Qt6 Wayland 支持可用sudo apt install qt6-waylandArch Linux / Manjarosudo pacman -S --needed base-devel cmake libgl ninja qt6-base qt6-tools qt6-wayland ccacheFedora 及衍生发行版sudo dnf install cmake libglvnd-devel ninja-build qt6-qtbase-devel qt6-qttools-devel qt6-qtwayland-devel ccacheopenSUSEsudo zypper install cmake libglvnd-devel ninja qt6-base-devel qt6-tools-devel qt6-wayland-devel ccacheNixOS 或使用 Nix使用 flake 提供的ladybird开发环境仓库根目录的 flake.nix 定义了该 devShellnix develop .#ladybird # 使用自定义入口点例如你喜欢的 shell nix develop .#ladybird --command bash如果你使用宿主机的nixpkgs与传统的nix-shell工具也可以nix-shell Ladybird # 使用自定义入口点 nix-shell --command bash LadybirdmacOSXcode 14.3 之前的版本在构建 Ladybird 时可能崩溃建议使用 Xcode 14.3 或 Homebrew 提供的 clangxcode-select --install brew install cmake ninja ccache若同时计划使用 Qt 界面Qt chrome还需要brew install qtOpenIndiana注意 OpenIndiana 最新的 GCC 移植版本GCC 11过旧无法构建 Ladybird因此必须使用仓库中可用的 Clangpfexec pkg install cmake ninja clang-17 libglvnd qt6Haikupkgman install cmake ninja cmd:python3 qt6_base_devel qt6_tools_devel openal_develWindows推荐使用 WSL2 / WSLg因为它提供了与上述任一 Linux 发行版一致的环境。MinGW/MSYS2不受支持但可能经过大量努力后勉强可用无论是 clang-cl 还是 MSVC原生 Windows 构建均不受支持。快速构建使用 serenity.sh 一键运行最简单的方式是通过仓库根目录的 Meta/serenity.sh 脚本。该脚本将lagom作为特殊 TARGET表示使用宿主工具链构建见脚本头部的 Usage 说明# 在 /path/to/serenity 下执行 ./Meta/serenity.sh run lagom ladybird ./Meta/serenity.sh gdb lagom ladybird第一条命令会完成构建并直接启动 Ladybird第二条命令在构建后进入 gdb 会话。从脚本实现看Meta/serenity.sh执行run lagom ladybird时脚本会自动追加-DBUILD_LAGOMON -DENABLE_LAGOM_LADYBIRDON到 CMake 参数随后通过build_and_run_lagom_target调用名为run-ladybird的 ninja 目标Meta/serenity.sh。该自定义目标定义于 Ladybird/CMakeLists.txt它会以SERENITY_SOURCE_DIR环境变量启动ladybird可执行文件。上述命令会依据平台选择以下两种浏览器 ChromeUI 框架之一AppKitmacOS 上的原生 Chrome。Qt其余所有平台使用的 Chrome。Chrome 的选择逻辑在 Ladybird/CMakeLists.txt 中ENABLE_QT开启时进入Qt子目录Ladybird/Qt内含 BrowserWindow、Tab、LocationEdit、SettingsDialog 等 Qt 界面实现ENABLE_QT关闭且为 macOS 时进入AppKit子目录Ladybird/AppKit。在非默认平台启用 Qt ChromeQt Chrome 在非默认平台上同样可用。安装好对应平台的 Qt 依赖后通过 CMake 开启# 在 /path/to/serenity 下执行 cmake -S Meta/Lagom -B Build/lagom -DENABLE_QTON如需重新关闭将上述命令改为-DENABLE_QTOFF即可。恢复默认行为禁用 Ladybird 构建注意通过脚本运行 Ladybird 会修改Build/lagom构建目录中的 CMake 缓存使后续使用serenity.sh启动 QEMU 实例重建 SerenityOS 时总是同时编译 LibWeb 与 Ladybird。要恢复仅从 Lagom 构建代码生成器与工具的原始行为必须把 CMake 缓存改回默认值cmake -S Meta/Lagom -B Build/lagom -DENABLE_LAGOM_LADYBIRDOFF -DENABLE_LAGOM_LIBWEBOFF -DBUILD_LAGOMOFF资源文件机制Ladybird 需要 Base/res 目录下的资源文件才能正确加载图标、字体与其他主题信息。serenity.sh会调用自定义 CMake 目标来设置相关变量并确保$PWD正确以便从构建目录直接执行。资源复制逻辑集中在 Ladybird/cmake/ResourceFiles.cmake它会将 emoji 字体、SerenitySans 等字体、16x16/32x32 及 browser 图标、Default/Dark 两套主题、ladybird 内部网页资源about.html、inspector.css、newtab.html 等、配置文件BrowserAutoplayAllowlist.txt、BrowserContentFilters.txt以及下载的cacert.pem全部复制进构建目录。在 macOS 上这些资源被打入.app包的Contents/Resources其他平台则复制到构建树中对应的Lagom数据目录Ladybird/CMakeLists.txt。如果不通过脚本运行构建产物可以直接调用 ninja 规则或使用下面的 CMake 安装规则进行安装。自定义 CMake 构建目录独立构建与打包如果你想单独构建 Ladybird或有意将其打包分发那么独立的 CMake 构建目录是更好的选择。Ladybird 既可以通过 Lagom 的 Meta/Lagom/CMakeLists.txt 构建也可以通过 Ladybird/CMakeLists.txt 直接构建对发行版打包而言以 Ladybird 作为源目录会得到期望的结果。Ladybird/cmake/InstallRules.cmake 定义了安装规则指明哪些二进制与库将被安装到配置的CMAKE_PREFIX_PATH或传给cmake --install的路径中——包括主程序ladybird、五个辅助进程ImageDecoder、RequestServer、SQLServer、WebContent、WebWorker以及全部关联的 Lagom 库并导出LadybirdConfig.cmake包配置文件与ladybird::命名空间的 CMake targets。使用自定义构建目录时用户可能需要通过CMAKE_CXX_COMPILER与CMAKE_C_COMPILER提供合适的 C 编译器g 14clang 14Apple Clang 14.3cmake -GNinja -S Ladybird -B Build/ladybird # 可选追加 -DCMAKE_CXX_COMPILER合适的编译器 -DCMAKE_C_COMPILER匹配的 c 编译器 cmake --build Build/ladybird ninja -C Build/ladybird run需要自动在 gdb 中运行时使用ninja -C Build/ladybird debug直接运行构建产物非 macOS 系统上不经过 ninja 规则直接运行./Build/ladybird/bin/LadybirdmacOS 上则通过open启动 .app 包将 stdout/stderr 重定向到当前终端open -W --stdout $(tty) --stderr $(tty) ./Build/ladybird/bin/Ladybird.app # 或者带参数启动 open -W --stdout $(tty) --stderr $(tty) ./Build/ladybird/bin/Ladybird.app --args https://ladybird.dev实验性 GN 构建Ladybird 还有一套实验性的 GN 构建方案它并非官方支持由感兴趣的贡献者以尽力而为的方式维护更新。详见 Meta/gn/README.md。总体而言GN 构建将 ninja 规则组织得比 CMake 构建更紧凑在某些系统上可能更快GN 还允许在同一构建目录中同时构建宿主目标与交叉目标这在交叉编译到其他平台时便于管理对宿主工具链的依赖。调试指南使用 CLion 调试首先需要以调试符号构建 Ladybird。编辑 Meta/CMake/lagom_compile_options.cmake将优化级别由-O2改为-O0macOS 上还需将调试选项从-g1改为-g以便 lldb 正确解析符号Linux 上可将-g1改为-ggdb3以获得最大调试信息。随后按前文方式运行 Ladybird./Meta/serenity.sh run lagom ladybird在 CLion 中使用 Run → Attach to Process 连接即可。如果调试的是布局与渲染问题在打开的进程列表中过滤WebContent并附加到该进程。此后断点、单步与变量检查均可正常工作。使用 Xcode 调试macOSserenity.sh构建脚本本身无法生成 Xcode 工程因此必须手动创建。为了与serenity.sh兼容需要附加几个额外选项若存在旧的 Lagom 构建目录CMake 可能会提示生成器已变更cmake -GXcode -S Meta/Lagom -B Build/lagom -DBUILD_LAGOMON -DENABLE_LAGOM_LADYBIRDON或者如果不需要与serenity.sh兼容可以像独立构建一样以 Ladybird 作为源目录cmake -GXcode -S Ladybird -B Build/ladybird生成 Xcode 工程后可在 Xcode 中打开ladybird.xcodeproj。该工程包含大量 target其中许多是生成代码唯一需要配置 scheme 的 target 是 ladybird 应用包本身。特殊平台构建细节OpenIndianaOpenIndiana 需要设置额外的环境变量以确保构建找到所需的全部可执行文件与目录。CMake 文件位于包含 Qt 版本号的非标准路径中请将6.2替换为你安装的 Qt 版本并且必须显式指定 clang / clang否则将使用当前 OpenIndiana 打包默认的 GCC 10 的 gcc / g。运行 Ladybird 时务必设置XDG_RUNTIME_DIR否则程序会因找不到可写的 socket 目录而立即崩溃CMAKE_PREFIX_PATH/usr/lib/qt/6.2/lib/amd64/cmake cmake -GNinja -S Ladybird -B Build/ladybird -DCMAKE_C_COMPILER/usr/bin/clang -DCMAKE_CXX_COMPILER/usr/bin/clang cmake --build Build/ladybird XDG_RUNTIME_DIR/var/tmp ninja -C Build/ladybird runHaikuHaiku 开箱即用地支持 Ladybird步骤与 OpenIndiana 相同但无需额外环境变量cmake -GNinja -S Ladybird -B Build/ladybird cmake --build Build/ladybird ninja -C Build/ladybird run构建后的验证与测试构建成功并运行 Ladybird 之后若需验证 LibWeb 渲染正确性仓库在 Ladybird/CMakeLists.txt 中集成了 CTest 测试LibWeb测试通过headless-browser --run-tests运行 Tests/LibWeb 目录下的用例WPT测试则调用 Tests/LibWeb/WPT/run.sh 执行 Web Platform Tests 集成用例两者均以QT_QPA_PLATFORMoffscreen无界面模式运行。这意味着你还可以通过headless-browser其源码位于 Userland/Utilities/headless-browser.cpp在无图形环境下验证构建产物与 LibWeb 行为无需启动完整的 GUI。【免费下载链接】serenityThe Serenity Operating System 项目地址: https://gitcode.com/GitHub_Trending/se/serenity创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/9/11 1:42:09
业务架构是什么?大白话讲透实战认知框架
2026/9/11 1:42:09
CodeScope Cypher 查询模式实战:用知识图谱深挖代码调用链、演化史与架构风险
2026/9/11 1:42:09
Metabase Cloud 实例怎么配置自定义域名?
2026/9/11 2:27:13
六款AI编程工具全栈Web项目横评:Claude Code与Cursor实战对比
2026/9/11 2:27:13
YOLOv8 3D识别实战:从像素坐标到机械臂抓取的完整视觉方案
2026/9/11 2:27:13
YoloV5目标检测与自动标注:实时瞄准辅助的工程实践
2026/9/11 2:27:13
Python+LightGBM实现国赛C题商超果蔬定价与补货预测
2026/9/11 2:27:13
粒子滤波实现电池RUL预测:Python状态空间建模与参数调优实践
2026/9/11 2:22:13
PLC控制的双级反渗透+混床全自动水处理系统设计
2026/9/11 0:02:03
数据容灾核心指标与实战方案解析
2026/9/11 0:02:03
Huly 平台 ClickUp 任务导入实战指南:从 CSV 导出到一键迁移全流程解析
2026/9/11 0:02:03
PyTorch 构建与代码生成工具链深度解析:从 tools 目录看懂构建流程、autograd/JIT 代码生成与 HIPify 移植
2026/9/10 2:30:52
超人会飞不算本事:系统稳定依赖清晰规则与边界设计
2026/9/10 5:51:31
超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论
2026/9/10 8:32:02
基于CNN的调制信号识别:MATLAB实现时频图分类实战