惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Check Point Blog
GbyAI
GbyAI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
U
Unit 42
美团技术团队
NISL@THU
NISL@THU
C
Cisco Blogs
SecWiki News
SecWiki News
N
Netflix TechBlog - Medium
Forbes - Security
Forbes - Security
Cloudbric
Cloudbric
雷峰网
雷峰网
T
Tailwind CSS Blog
博客园 - 司徒正美
The Register - Security
The Register - Security
L
LangChain Blog
S
Security Affairs
Hacker News - Newest:
Hacker News - Newest: "LLM"
B
Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
Threat Research - Cisco Blogs
I
InfoQ
S
Schneier on Security
L
Lohrmann on Cybersecurity
量子位
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Martin Fowler
Martin Fowler
Schneier on Security
Schneier on Security
F
Fortinet All Blogs
TaoSecurity Blog
TaoSecurity Blog
K
Kaspersky official blog
Google DeepMind News
Google DeepMind News
Cisco Talos Blog
Cisco Talos Blog
PCI Perspectives
PCI Perspectives
Attack and Defense Labs
Attack and Defense Labs
WordPress大学
WordPress大学
Microsoft Azure Blog
Microsoft Azure Blog
H
Help Net Security
Project Zero
Project Zero
The GitHub Blog
The GitHub Blog
D
Docker
N
News | PayPal Newsroom
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
H
Hacker News: Front Page
云风的 BLOG
云风的 BLOG
Microsoft Security Blog
Microsoft Security Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 聂微东
Webroot Blog
Webroot Blog
MongoDB | Blog
MongoDB | Blog

博客园 - 我才是银古

第16章:常见问题、排错与最佳实践 第15章:扩展生态、MCAD 与外部集成 第12章:实战案例:机械结构与 3D 打印零件 第14章:构建、测试、调试与贡献流程 第13章:OpenSCAD 源码架构与核心执行流程 第11章:预览、渲染、网格精度与性能优化 第09章:列表推导、递归与算法建模 第08章:参数化零件库与复用设计 第10章:导入导出、命令行与自动化 第06章:CSG 布尔建模方法 第07章:二维图形、拉伸、旋转与投影 第05章:基础几何、坐标系与变换 第04章:参数、变量、函数、模块与作用域 OpenSCAD 教程目录 第03章:OpenSCAD 语言基础 第02章:安装、环境配置与开发工作流 第01章:OpenSCAD 项目全景与学习路线 第01章:OCCT项目全景与学习路线 第18章:二次开发实战与综合案例 第17章:与 Qt VTK Python pythonOCC 生态集成 第18章:综合实战案例 第17章:数据交换与协同 第16章:源码架构与二次开发 第15章:插件与自定义工作台开发 第14章:Python脚本宏与自动化 第13章:FEM仿真分析 第12章:CAM数控加工 第11章:SurfaceMesh与逆向工程 第10章:Draft二维绘图与BIM建筑 第09章:工程图TechDraw 第07章:参数化表达式与Spreadsheet 第08章:装配设计Assembly 第06章:Part工作台与几何内核 第05章:PartDesign实体特征建模 第04章:草图Sketcher约束建模 第02章:安装版本与工作环境配置 第03章:界面工作台与基础操作 第01章:项目全景与学习路线 第十二章:插件开发、研究功能与最佳实践 第十章:定时任务与自动化(Cron) 第七章:技能、记忆与自学习闭环 第八章:MCP 集成与上下文文件 第六章:工具系统与终端后端 第五章:模型供应商与配置体系 Hermes Agent 教程目录 第十一章:语音、视觉、浏览器与子代理协作 第四章:CLI/TUI 与会话管理 第十二章:学习路线、实战方案与最佳实践 第十一章:源码结构、开发调试与插件开发 第十章:自动化、远程访问、日志与排障 第九章:Control UI、节点、Canvas 与语音能力 第七章:工具、技能、插件与能力扩展 第八章:安全模型、访问控制与沙箱实践 第六章:Agent 工作区、会话与多智能体路由 第五章:多通道消息接入与聊天平台配置 第四章:配置体系、模型接入与认证管理 第三章:Gateway 架构、协议与运行机制 第二章:安装、环境准备与快速上手 第一章:OpenClaw 项目概览与核心定位 oh-my-openagent 教程目录 09-命令模型回退与配置参考 10-实战案例最佳实践与故障排除 05-工作模式-Ultrawork-Prometheus-Atlas 08-Hooks与MCP系统 06-Category与Skill系统 07-核心工具链 04-智能体全景详解 03-安装与环境配置 02-整体架构与多模型编排机制 01-项目简介与核心理念 01-项目概览与学习路线 02-安装部署与工具适配 03-Skill机制与using-superpowers 05-TDD系统化调试与完成前验证 04-需求澄清方案设计与计划编写 07-并行智能体子智能体与Git-Worktree 第六章:代码审查、反馈处理与分支收尾 08-中国特色Skills与本土团队落地 09-MCP构建工作流执行与自定义Skill 第23章:FreeCAD-Python-API Clipper2 C# 源码解读教程 第19章:PolyTree 多边形树结构 第20章:实际应用与最佳实践 第18章:Minkowski 和与差 第17章:RectClip 矩形裁剪优化 第16章:ClipperOffset 偏移类详解 第15章:填充规则详解 第14章:布尔运算执行流程 第13章:ClipperD 浮点裁剪类 第11章:OutRec 与 OutPt 输出结构 第9章:Active 活动边结构 第10章:Vertex 顶点与 LocalMinima 局部极小值 第12章:Clipper64 裁剪类详解 第7章:高精度运算与128位整数 第8章:ClipperBase 基类详解 第5章:枚举类型与常量定义 第6章:InternalClipper 内部工具类 第2章:核心数据结构 - Point64、PointD 第3章:路径与多边形表示 - Path64、PathD、Paths64、PathsD 第4章:矩形边界 - Rect64、RectD
第02章:源码获取、编译与开发环境配置
我才是银古 · 2026-05-06 · via 博客园 - 我才是银古

第02章:源码获取、编译与开发环境配置

OCCT 是一个体量较大的 C++ 工程,初次构建经常因为依赖缺失、CMake 选项设置不当而受阻。本章按照官方仓库的 README.mdOCCT_BUILD.mddox/dev_guides/building 文档梳理出一条稳定的搭建路径,覆盖 Windows、Linux、macOS 与常见可视化/数据交换依赖。

1. 获取源码

官方主仓库位于 GitHub:

git clone https://github.com/Open-Cascade-SAS/OCCT.git
cd OCCT
git fetch --tags
git checkout V7_8_0   # 或者最新稳定 tag

仓库默认分支是 master,长期稳定版本以 V7_x_y 形式打 tag,发布说明在 dox/dev_guides/upgrade 与每个版本的 release notes 中。如需贡献代码,应阅读 CONTRIBUTING.md 并使用 Open Cascade 的 mantis bugtracker 流程。

仓库中的 data/ 目录较大,包含示例与测试几何,可以使用 git clone --filter=blob:none --depth=N 之类策略减少带宽,但首次构建建议完整克隆,避免测试失败。

2. 系统级依赖

OCCT 的核心仅依赖 C++ 标准库与少量系统接口,但要启用完整功能需要以下第三方库:

模块 依赖 说明
可视化 OpenGL、Freetype OpenGl_* 后端必需,文字渲染需要 freetype
数据交换 (可选)RapidJSON、Draco glTF 解析与压缩
测试 Tcl/Tk Draw Test Harness 必需
图像 IO FreeImage 或 FFmpeg 截图、视频录制
并行 TBB(可选) 并行算法加速
Web 可视化 Emscripten 工具链 WebGL 后端

Open Cascade 提供官方“Third-Party Components”包(针对 Windows)打包了 freetype/freeimage/tcl/tbb 等预编译版本,下载地址在官网下载页。Linux/macOS 通常使用系统包管理器安装。

Windows

通过 Visual Studio 2019/2022 + 官方第三方包:

  • 安装 VS(含 C++ 开发工具)。
  • 下载 3rdparty-vc14-64.zip 解压到例如 C:\OpenCASCADE\3rdparty
  • 安装 CMake 3.22+。

Linux(Ubuntu/Debian)

sudo apt install build-essential cmake \
    libfreetype-dev libtbb-dev tcl-dev tk-dev \
    libgl1-mesa-dev libglu1-mesa-dev libxmu-dev libxi-dev \
    libfreeimage-dev rapidjson-dev libdraco-dev

macOS

brew install cmake freetype tbb tcl-tk freeimage rapidjson draco

此外需要 Xcode Command Line Tools。

3. CMake 构建

OCCT 推荐使用 CMake 进行跨平台构建,旧的 genproj 脚本仍可用但不再优先。常用流程:

mkdir build && cd build
cmake .. \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_INSTALL_PREFIX=$PWD/../install \
  -DBUILD_LIBRARY_TYPE=Shared \
  -DUSE_FREETYPE=ON \
  -DUSE_TK=ON \
  -DUSE_TBB=OFF \
  -DUSE_FREEIMAGE=ON \
  -DUSE_RAPIDJSON=ON \
  -DUSE_DRACO=ON \
  -DBUILD_MODULE_Draw=ON \
  -DBUILD_MODULE_Visualization=ON \
  -DBUILD_MODULE_DataExchange=ON \
  -DBUILD_MODULE_ApplicationFramework=ON
cmake --build . -j$(nproc)
cmake --install .

关键 CMake 选项:

  • BUILD_LIBRARY_TYPESharedStatic,默认共享。Windows 上 Static 链接 toolkit 数量太大需要全 WHOLEARCHIVE
  • BUILD_MODULE_*:按模块开关裁剪,例如不需要数据交换可关闭 DataExchange
  • USE_*:是否使用某个第三方依赖,关闭后相关 toolkit 不会构建。
  • BUILD_RELEASE_DISABLE_EXCEPTIONS:旧版本宏,默认 OFF,保留异常以便诊断。
  • INSTALL_DIR_LAYOUTDefaultUnix,决定 install 目录布局,跨平台对齐时使用。
  • BUILD_DOC_Overview:是否构建 Doxygen 文档。

4. 验证构建

构建完成后,运行 Draw Test Harness 是检验环境的最直接方式:

# 设置环境
source install/env.sh        # Linux/macOS
# 或 install\env.bat          # Windows

# 启动 Draw
draw.sh   # 或 draw.bat

# 在 Draw 控制台中执行
Draw[1]> pload ALL
Draw[2]> box b 100 50 30
Draw[3]> vinit View1
Draw[4]> vdisplay b
Draw[5]> vfit

如果窗口正常显示一个矩形盒子,则核心功能可用。再尝试:

Draw[6]> stepread test.step b1 *
Draw[7]> vdisplay b1_1

验证 STEP 数据交换是否启用。

5. IDE 集成

  • Visual Studio:CMake 直接生成 .sln;建议把 Draw 设为启动项目调试。
  • Qt Creator:导入 CMake 工程,配置 env.sh 作为运行环境。
  • CLion:支持 CMake 多 Profile,可针对 Debug/Release 分别配置。
  • VS Code:使用 CMake Tools 插件、C/C++ 插件、CodeLLDB。配置 cmake.configureSettings 即可。

6. 集成到自己的工程

OCCT 安装后会生成 OpenCASCADEConfig.cmakeOpenCASCADE<Module>Targets.cmake,使用方式:

find_package(OpenCASCADE 7.8 REQUIRED COMPONENTS
  FoundationClasses ModelingData ModelingAlgorithms
  Visualization DataExchange ApplicationFramework)
add_executable(myapp main.cpp)
target_link_libraries(myapp PRIVATE
  TKernel TKMath TKG3d TKBRep TKTopAlgo TKBO TKPrim
  TKV3d TKOpenGl TKService TKSTEP TKIGES TKDEGLTF TKXCAF)

具体 toolkit 名称在 src/<Toolkit>/PACKAGESsrc/<Toolkit>/EXTERNLIB 中可查;Modules 与 toolkit 的对应关系在 adm/cmake/occt_modules.cmake

7. 常见构建问题

  • 找不到 freetype/tbb:检查 3RDPARTY_FREETYPE_DIR 等 CMake 变量;Windows 上经常需要手动指定。
  • OpenGL/Wayland 冲突:Linux 上若使用 Wayland 需安装 libxcb-* 一系列包,或回退到 X11。
  • Tcl/Tk 版本错误:Draw 要求 Tcl 8.6 系列;macOS 自带的 Tcl 8.5 不兼容,需要 Homebrew 的 tcl-tk@9 之外的版本。
  • 链接报 unresolved external _CLSID_(Windows):缺少 User32.libComCtl32.lib,应使用官方 CMake 模板。
  • glTF 失败:未启用 USE_RAPIDJSON/USE_DRACO,检查 TKDEGLTF 是否生成。

8. 发布与裁剪

OCCT 体量较大(动态库总和数百 MB)。在嵌入式或商业产品中可以裁剪:

  • 关闭不需要的模块;
  • 仅链接实际使用的 toolkit;
  • 在 Release 下开启 LTO、-Os
  • 移除不必要的资源(resources/);
  • 对数据交换格式选择性启用 TKDESTEPTKDEIGESTKDESTLTKDEGLTFTKDEOBJTKDEVRML 等。

9. Docker 与 CI

仓库 .github/workflows 提供 Linux/Windows/macOS 的 CI 配置,可作为持续集成的参考。社区也有维护 Docker 镜像(如 gitpod-io/template-occttpaviot/oce-debian),便于在容器中快速试用。建议自有项目使用 OCI 镜像缓存第三方依赖,以加速 CI。

完成本章的环境配置后,便可以开始进入代码层面的学习。下一章将从 OCCT 的底层基础类入手。