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

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
Schneier on Security
Schneier on Security
H
Help Net Security
PCI Perspectives
PCI Perspectives
博客园 - 司徒正美
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Google Online Security Blog
Google Online Security Blog
V
Visual Studio Blog
Engineering at Meta
Engineering at Meta
Last Week in AI
Last Week in AI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
L
LINUX DO - 最新话题
GbyAI
GbyAI
IT之家
IT之家
TaoSecurity Blog
TaoSecurity Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
J
Java Code Geeks
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
N
News and Events Feed by Topic
Recent Announcements
Recent Announcements
Google DeepMind News
Google DeepMind News
美团技术团队
T
Troy Hunt's Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
Cloudbric
Cloudbric
A
About on SuperTechFans
Recorded Future
Recorded Future
Microsoft Security Blog
Microsoft Security Blog
阮一峰的网络日志
阮一峰的网络日志
H
Hacker News: Front Page
Forbes - Security
Forbes - Security
Webroot Blog
Webroot Blog
D
DataBreaches.Net
L
LangChain Blog
S
Schneier on Security
博客园_首页
S
SegmentFault 最新的问题
Apple Machine Learning Research
Apple Machine Learning Research
N
News | PayPal Newsroom
Hacker News - Newest:
Hacker News - Newest: "LLM"
爱范儿
爱范儿
量子位
T
The Exploit Database - CXSecurity.com
博客园 - 【当耐特】
T
Threatpost
The Hacker News
The Hacker News
N
News and Events Feed by Topic
罗磊的独立博客
Spread Privacy
Spread Privacy
Hacker News: Ask HN
Hacker News: Ask HN

博客园 - 我才是银古

第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 的底层基础类入手。