常见问题排查¶
本文档提供 CFDesktop 项目开发和构建过程中常见问题的解决方案。
目录¶
Docker 相关问题¶
Docker 未启动¶
症状:
解决方案:
# Linux
sudo systemctl start docker
sudo systemctl status docker
# macOS/Windows
# 启动 Docker Desktop 应用程序
验证 Docker 运行状态:
Docker 镜像构建失败¶
症状: 构建镜像时出现错误
常见原因和解决方案:
1. 网络问题¶
# 使用国内镜像加速
# 编辑 /etc/docker/daemon.json (Linux) 或 Docker Desktop 设置
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
]
}
# 重启 Docker
sudo systemctl restart docker
2. 基础镜像拉取失败¶
# 手动拉取基础镜像
docker pull ubuntu:24.04
# 或使用镜像加速
docker pull registry.cn-hangzhou.aliyuncs.com/library/ubuntu:24.04
3. 磁盘空间不足¶
4. 构建缓存问题¶
# 使用 --no-cache 重新构建
docker build --no-cache -f scripts/docker/Dockerfile.build -t cfdesktop-build .
容器网络问题¶
症状: 容器内无法访问外部网络
解决方案:
# 检查 Docker 网络
docker network ls
docker network inspect bridge
# 重启 Docker 网络服务
sudo systemctl restart docker
# 使用 host 网络模式(Linux)
docker run --rm --network host -v $(pwd):/project cfdesktop-build
ARM64 QEMU 仿真慢¶
症状: ARM64 构建非常缓慢(30+ 分钟)
原因: x86_64 主机使用 QEMU 仿真 ARM64
解决方案:
- 使用快速构建模式:
- 跳过 ARM64 验证(如果不是必需):
-
在原生 ARM64 环境构建:
-
使用 ARM64 服务器/实例
- 使用 Apple Silicon Mac
Windows 路径挂载问题¶
症状: 容器内找不到挂载的目录
解决方案:
# 确保路径使用正确格式
# Docker 需要 POSIX 路径
# Git Bash 自动转换
bash scripts/build_helpers/docker_start.sh
# PowerShell 需要手动转换
$env:MSYS_NO_PATHCONV=1
docker run --rm -v "D:/ProjectHome/CFDesktop:/project" cfdesktop-build
容器内权限问题¶
症状: 容器内无法写入文件
解决方案:
# Linux: 使用当前用户运行
docker run --rm -u $(id -u):$(id -g) -v $(pwd):/project cfdesktop-build
# 或修改文件权限
sudo chown -R $USER:$USER out/
构建问题¶
编译错误¶
症状: C++ 编译时出现错误
常见类型和解决方案:
1. 头文件未找到¶
解决方案:
# 检查 CMake_INCLUDE_PATH
# 检查依赖是否正确安装
# Docker 内重新安装依赖
docker run --rm -v $(pwd):/project cfdesktop-build bash -c "
apt-get update && \
bash /project/scripts/dependency/install_build_dependencies.sh
"
2. Qt 版本不匹配¶
解决方案:
# 检查 Qt 版本
qmake --version
qmlplugindump --version
# CMakeLists.txt 中指定正确版本
find_package(Qt6 6.8.1 REQUIRED COMPONENTS Core Gui Widgets)
3. C++ 标准问题¶
解决方案:
链接错误¶
症状: 编译成功但链接失败
常见错误和解决方案:
1. 未定义引用¶
解决方案:
2. 库文件未找到¶
解决方案:
CMake 配置错误¶
症状: CMake 配置阶段失败
常见问题:
1. 构建类型未指定¶
解决方案:
2. 工具链问题¶
解决方案:
# 指定工具链
cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/toolchain.cmake -S . -B out/build
# 或使用预设工具链
cmake -DUSE_TOOLCHAIN=linux/llvm -S . -B out/build
Qt 相关问题¶
Qt 未找到¶
解决方案:
# 设置 Qt 路径
export Qt6_DIR=/path/to/Qt/6.8.1/gcc_64/lib/cmake/Qt6
cmake -DQt6_DIR=/path/to/Qt/6.8.1/gcc_64/lib/cmake/Qt6 -S . -B out/build
Qt 模块缺失¶
解决方案:
# Docker 内重新安装 Qt
docker run --rm -v $(pwd):/project cfdesktop-build bash -c "
python3 -m aqt install-qt --outputdir /opt linux desktop 6.8.1 gcc_64 -m qtbase qttools
"
测试失败¶
症状: 构建成功但测试失败
调试步骤:
# 详细测试输出
bash scripts/build_helpers/linux_run_tests.sh ci -c build_ci_config.ini --verbose
# 运行特定测试
ctest -R test_name --verbose
# 输出到文件
ctest --output-on-failure > test_results.txt
Git Hooks 问题¶
Pre-Commit 失败¶
症状: 提交时被 Hook 阻止
1. 空白字符检查失败¶
解决方案:
# 自动修复
bash scripts/develop/remove_trailing_space.sh --staged
# 或强制提交(不推荐)
git commit --no-verify -m "message"
2. clang-format 失败¶
解决方案:
Pre-Push 验证失败¶
症状: 推送时被 Hook 阻止
1. 版本号检查失败¶
解决方案:
# 更新版本号
vim CMakeLists.txt # 修改 VERSION x.y.z
# 提交版本变更
git add CMakeLists.txt
git commit -m "chore: bump version to x.y.z"
# 重新推送
git push
2. Docker 构建失败¶
解决方案:
# 本地手动验证
bash scripts/build_helpers/docker_start.sh --verify
# 查看详细日志
# 日志保存在 scripts/docker/logger/ci_build_*.log
# 或强制推送(不推荐)
git push --no-verify
Hook 未执行¶
症状: Hook 脚本没有运行
解决方案:
# 检查 Hook 是否安装
ls -la .git/hooks/pre-commit .git/hooks/pre-push
# 重新安装
bash scripts/release/hooks/install_hooks.sh
# 检查执行权限
chmod +x .git/hooks/pre-commit .git/hooks/pre-push
Git Bash 路径问题¶
症状: Windows Git Bash 中 Hook 路径错误
解决方案:
性能优化¶
使用快速构建缓存¶
# 复用现有 Docker 镜像
bash scripts/build_helpers/docker_start.sh --fast-build
# 结合验证使用
bash scripts/build_helpers/docker_start.sh --fast-build --verify
配置 ccache¶
# 在 Docker 容器内配置 ccache
docker run --rm -v $(pwd):/project -v ~/.ccache:/root/.ccache cfdesktop-build
# 或使用环境变量
export CCACHE_DIR=~/.ccache
export CCACHE_MAXSIZE=10G
并行编译调整¶
本地构建(跳过 Docker)¶
对于频繁的本地开发,可以使用宿主机环境:
# 设置 Qt 路径
export Qt6_DIR=/path/to/Qt/6.8.1/gcc_64/lib/cmake/Qt6
# 配置和构建
cmake -S . -B out/build -DCMAKE_BUILD_TYPE=Debug
cmake --build out/build --parallel
增量构建¶
# 使用快速构建脚本(不清理)
bash scripts/build_helpers/linux_fast_develop_build.sh -c build_develop_config.ini
# 只构建变更的目标
cmake --build out/build --target <specific_target>
获取更多帮助¶
查看日志¶
# Docker 构建日志
ls scripts/docker/logger/ci_build_*.log
# CMake 配置日志
cat out/build/CMakeFiles/CMakeOutput.log
cat out/build/CMakeFiles/CMakeError.log
调试模式¶
# Docker 交互式调试
bash scripts/build_helpers/docker_start.sh
# 在容器内手动运行命令
# CMake 详细输出
cmake -S . -B out/build --trace-expand
# Make 详细输出
make VERBOSE=1
项目资源¶
联系方式¶
- 项目维护者: 通过 GitHub Issues 联系
- 讨论区: GitHub Discussions
报告问题模板¶
提交问题时,请包含以下信息:
[粘贴错误输出]