当前位置: 首页 > news >正文

【QOwnNotes】编译笔记

📋 环境准备

系统环境

  • 操作系统: Windows + MSYS2 UCRT64
  • Shell: bash
  • 目标: 从源码编译 QOwnNotes (Qt6 版本)

必要软件安装

# 1. 基础开发工具pacman -S --needed mingw-w64-ucrt-x86_64-toolchain\mingw-w64-ucrt-x86_64-cmake\mingw-w64-ucrt-x86_64-ninja# 2. Qt6 开发库pacman -S mingw-w64-ucrt-x86_64-qt6-base\mingw-w64-ucrt-x86_64-qt6-svg\mingw-w64-ucrt-x86_64-qt6-tools\mingw-w64-ucrt-x86_64-qt6-multimedia\mingw-w64-ucrt-x86_64-qt6-websockets\mingw-w64-ucrt-x86_64-qt6-declarative\mingw-w64-ucrt-x86_64-qt6-5compat# 3. 网络工具(解决 SSL 问题)pacman -S ca-certificatescurl

🚨 常见问题与解决方案

问题1: SSL 证书错误

error: RPC failed; curl 56 Recv failure: Connection reset by peer SSL certificate OpenSSL verify result: unable to get local issuer certificate

解决方案:

# 方法1: 临时禁用 SSL 验证exportGIT_SSL_NO_VERIFY=1gitclone...unsetGIT_SSL_NO_VERIFY# 方法2: 单个命令禁用GIT_SSL_NO_VERIFY=1gitclone...# 方法3: 手动下载(当 git 失败时)curl-L -k https://github.com/user/repo/archive/refs/heads/main.tar.gz -o repo.tar.gztar-xzf repo.tar.gz

问题2: 子模块克隆不完整

子模块目录只有.git文件,没有实际内容。

解决方案:

# 批量修复脚本forsubmodulein$(grep"path = ".gitmodules|cut-d'='-f2|tr-d' ');doif[-f"$submodule/.git"]&&[$(ls-A"$submodule"2>/dev/null|wc-l)-le1];thenecho"修复:$submodule"gitsubmodule deinit -f"$submodule"rm-rf"$submodule"GIT_SSL_NO_VERIFY=1gitsubmodule update --init --depth1"$submodule"fidone

问题3: 缺失构建文件

CMake 报告找不到源文件,如linenumberarea.h,toolbar_editor.cpp等。

检查步骤:

# 1. 检查文件是否存在findsrc/libraries -name"missing_file.cpp"-type f# 2. 检查子模块状态gitsubmodule status# 3. 重新初始化特定子模块gitsubmodule deinit -f src/libraries/problem_modulerm-rf src/libraries/problem_modulegitsubmodule update --init --depth1src/libraries/problem_module

🛠️ 完整编译流程

步骤1: 克隆仓库

# 浅克隆主仓库gitclone --depth1https://github.com/pbek/QOwnNotes.gitcdQOwnNotes# 初始化子模块(可能需多次尝试)exportGIT_SSL_NO_VERIFY=1gitsubmodule update --init --recursive --depth1unsetGIT_SSL_NO_VERIFY

步骤2: 配置构建

# 创建构建目录mkdirbuild-qt6cdbuild-qt6# 配置为 Qt6 构建cmake -G"Ninja"-DQON_QT6_BUILD=ON../src

如果配置失败:

  • 检查错误信息中提到的缺失文件
  • 修复对应的子模块
  • 重新运行 cmake

步骤3: 编译

# 开始编译(使用多核加速)ninja -j$(nproc)# 或指定核心数ninja -j4

步骤4: 运行

# 运行编译的程序(注意:在 build-qt6 目录下运行)cd~/QOwnNotes/build-qt6 ./QOwnNotes.exe

📁 项目结构说明

QOwnNotes/ ├── src/ # 主源代码目录 │ ├── CMakeLists.txt # 主构建配置 │ └── ... # 源代码文件 ├── src/libraries/ # 第三方库(子模块) │ ├── botan/ # 加密库 │ ├── md4c/ # Markdown 解析器 │ ├── qhotkey/ # 全局热键支持 │ ├── qmarkdowntextedit/ # Markdown 编辑器组件 │ └── ... # 其他子模块 └── build-qt6/ # 构建目录(自行创建) ├── QOwnNotes.exe # 可执行文件位置 └── ... # 其他构建文件

⚙️ CMake 配置选项

选项默认值说明
QON_QT6_BUILDOFF启用 Qt6 构建(设为 ON)
CMAKE_BUILD_TYPERelease构建类型(Debug/Release)
QT_VERSION_MAJOR5Qt 主版本(自动设置)

完整配置命令:

cmake -G"Ninja"\-DQON_QT6_BUILD=ON\-DCMAKE_BUILD_TYPE=Release\../src

🔄 更新与重新编译

更新源代码

cd~/QOwnNotes# 更新主仓库gitpull# 更新所有子模块gitsubmodule update --init --recursive# 重新编译cdbuild-qt6 ninja

完全重新构建

cd~/QOwnNotesrm-rf build-qt6mkdirbuild-qt6cdbuild-qt6 cmake -G"Ninja"-DQON_QT6_BUILD=ON../src ninja

🐛 调试版本构建

# 创建调试构建mkdirbuild-debugcdbuild-debug cmake -G"Ninja"-DQON_QT6_BUILD=ON -DCMAKE_BUILD_TYPE=Debug../src ninja# 使用 GDB 调试gdb ./QOwnNotes.exe

📦 发布准备

收集运行时依赖

# 使用 windeployqt(需要安装)cd~/QOwnNotes/build-qt6 windeployqt QOwnNotes.exe# 手动检查缺失的 DLLldd QOwnNotes.exe|grep"not found"

创建便携版

  1. 复制build-qt6/QOwnNotes.exe到新目录
  2. 使用windeployqt收集所有 Qt DLL
  3. 复制必要的资源文件
  4. 创建启动脚本

💡 实用技巧

1. 加速编译

# 仅编译更改的部分ninja# 完全重新编译ninja clean ninja# 并行编译(根据 CPU 核心数)ninja -j$(nproc)

2. 查看编译进度

# 实时查看进度whiletrue;doclearninja -n2>&1|grep-E"^\[[0-9]+/[0-9]+\]"|tail-1sleep5done

3. 解决特定编译错误

# 查看详细错误信息ninja -v2>&1|tail-50# 查看 CMake 缓存变量cmake -L.|grep-i qt

📝 学习要点

  1. Git 子模块管理是大型项目的常见模式
  2. CMake是现代 C++ 项目的标准构建系统
  3. Qt6 迁移需要注意 API 变化(如count()size()
  4. MSYS2提供了完整的 Linux 工具链在 Windows 上
  5. 依赖管理是 C++ 开发的关键挑战

🔗 有用资源

  • QOwnNotes GitHub
  • Qt6 文档
  • CMake 教程
  • MSYS2 文档

关键路径说明:

  • 源码目录:~/QOwnNotes/src/
  • 构建目录:~/QOwnNotes/build-qt6/
  • 可执行文件:~/QOwnNotes/build-qt6/QOwnNotes.exe
  • 运行命令:cd ~/QOwnNotes/build-qt6 && ./QOwnNotes.exe

最后编译时间: 2024-12-29
编译环境: MSYS2 UCRT64, Qt6, Ninja
运行位置:~/QOwnNotes/build-qt6/目录下
状态: ✅ 成功运行

http://www.jsqmd.com/news/160494/

相关文章:

  • 【万金油-立项管理】信息系统项目工程师案例分析
  • java计算机毕业设计校园物品交易系统 高校二手闲置物品置换平台 校园跳蚤市场数字化交易系统
  • 学长亲荐8个AI论文软件,研究生轻松搞定毕业论文!
  • 2026零基础如何参与护网行动?(非常详细)
  • python医疗药店连锁药店管理系统vue
  • 企业将AI生产力提升收益再投入自动化扩展
  • 基于龙格-库塔方法与中心差分方法求解随机非线性薛定谔方程的数值实现
  • 护网行动期间新人最容易犯哪些错误?如何避免?
  • 2025年国家高新认定推荐企业排行榜:国家高新认定诚信的公司有哪些? - 工业推荐榜
  • java计算机毕业设计校园食堂订餐系统 高校智慧食堂在线订餐平台 校园餐饮一站式预约系统
  • 基于单片机的汽车防撞系统
  • TechCrunch Disrupt创业竞赛中脱颖而出的7家太空与国防科技公司
  • 2026年海外数字化营销公司TOP5推荐:涵盖 Facebook、Google、TikTok、 ins、LinkedIn 等海外营销主流平台 - 品牌2025
  • IDEA(2020版)实现JSP隐式对象
  • Jupyter Notebook插入图片和视频展示模型输出效果
  • python在线教学评比平台vue评教
  • 2025年河北跨境物流服务公司推荐榜:跨境电商物流服务/海外仓运营服务/国际货运代理服务/国际海运代理服务/国际空运代理服务/海外仓服务公司精选 - 品牌推荐官
  • 私有化 AI 部署利器:Panelai 如何实现多用户管理与一键安装 ComfyUI/SD?
  • python幼儿园托幼机构管理系统文件vue
  • 从GitHub克隆项目到本地运行:基于PyTorch-CUDA镜像的全流程
  • 2025年差压变送器厂家推荐:压力变送器厂家有哪些? - mypinpai
  • python招标投标文件在线制作系统vue
  • 2025年热镀锌型材供应商权威推荐榜:镀锌管/镀锌方管/镀锌角钢/镀锌槽钢/镀锌扁钢源头厂家实力精选 - 品牌推荐官
  • 别再犹豫了!网安 327 万缺口 + 越老越吃香,现在加入稳赚不亏!
  • 深度学习入门必看:用PyTorch-v2.7快速搭建CNN模型
  • python汽车4s店销售预约试驾vue
  • 解决PyTorch OOM(内存溢出)问题的有效方法汇总
  • java计算机毕业设计校园淘书系统 高校二手书交易共享平台 校园闲置教材流转系统
  • 2026年苏州海外社媒运营推广服务商精选(涵盖 Facebook、LinkedIn 领英、TikTok 、Google营销推广获客解决方案) - 品牌2025
  • 2025年压力变送器知名品牌排行榜,高性价比制造商研发能力测评推荐 - mypinpai