【open3d】Windows 下编译 Open3D C++ 源码完整教程
文章目录
- [【open3d】Windows 下编译 Open3D C++ 源码完整教程](#【open3d】Windows 下编译 Open3D C++ 源码完整教程)
- 前言
- 编译前环境准备(必装组件)
- [CMake 配置(生成 Visual Studio 工程文件)](#CMake 配置(生成 Visual Studio 工程文件))
-
-
- [获取 Open3D 源码(Git 克隆)](#获取 Open3D 源码(Git 克隆))
- 创建编译目录(规范做法,分离源码与编译产物)
- [执行 CMake 命令生成工程](#执行 CMake 命令生成工程)
- 关键注意事项
- 依赖下载失败的通用解决方法
-
- [编译 Open3D 源码(Visual Studio 执行编译)](#编译 Open3D 源码(Visual Studio 执行编译))
-
-
- [方式1:Visual Studio 图形界面编译](#方式1:Visual Studio 图形界面编译)
- [方式2:命令行编译(无需打开 VS)](#方式2:命令行编译(无需打开 VS))
- 手动下载缺失依赖包的通用解决方法
- 安装验证(编译产物检查)
-
- [验证 Open3D 依赖(Visual Studio)](#验证 Open3D 依赖(Visual Studio))
- 总结
前言
Open3D 官方推荐使用 CMake + Visual Studio 作为 Windows 平台 C++ 源码的编译工具链,以下是从环境准备、源码获取到编译安装、工程配置的全流程步骤,适配最新版 Open3D 源码,兼容 Visual Studio 2019/2022(64位)。
【参考1】
【参考2】
编译前环境准备(必装组件)
核心编译工具
-
CMake :版本 ≥ 3.21(Open3D 官方最低要求),官网下载 64位安装包,安装时勾选 Add CMake to the system PATH for all users (添加到系统环境变量)。
bashcmake --version
-
Visual Studio :官网下载 2019 或 2022 社区版/专业版,安装时必须勾选 使用C++的桌面开发 工作负载,同时确保包含 MSVC 编译器 、Windows SDK (建议 10.0.19041.0 及以上)。
bash"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -property catalog_productLineVersion
-
Git :用于克隆 Open3D 源码,官网下载 64位版本,安装时默认勾选添加到环境变量。
bashgit --version
依赖项
Open3D 源码会自动下载并配置所有编译依赖(如 Eigen、GLFW、Boost 等),但是由于网络延迟等种种原因,后续可能需要手动下载安装替换。
环境要求
- 系统:Windows 10/11 64位(32位系统不支持)
- 磁盘空间:至少 20GB 空闲(源码+依赖+编译产物)
- 内存:建议 16GB 及以上(8GB 可能出现编译卡顿/内存不足)
CMake 配置(生成 Visual Studio 工程文件)
获取 Open3D 源码(Git 克隆)
-
打开 Git Bash 或 Windows 终端 ,切换到想要存放源码的目录:
bashcd E:\ && mkdir Open3D && cd Open3D -
克隆 Open3D 源码仓库(包含所有子模块,必须加
--recursive):-
官方仓库(推荐):
bashgit clone --recursive https://github.com/isl-org/Open3D.git -
若克隆速度慢,可使用 Gitee 镜像(国内速度更快):
bashgit clone --recursive https://gitee.com/mirrors/Open3D.git
-
-
克隆完成后,进入源码根目录:
bashcd Open3D
创建编译目录(规范做法,分离源码与编译产物)
在 Open3D 源码根目录下,创建 build 文件夹(编译产物会存放在此,后续可直接删除清理):
cmd
mkdir build && cd build
执行 CMake 命令生成工程
核心 CMake 命令格式(适配 Visual Studio 2022,64位),直接在 build 目录下执行:
cmd
cmake .. -G "Visual Studio 17 2022" -A x64 -DCMAKE_INSTALL_PREFIX=E:\Open3D\install
..:指定 CMake 配置的源码根目录(即 Open3D 源码的 CMakeLists.txt 所在路径);-G "Visual Studio 17 2022":指定生成的工程文件适配 Visual Studio 2022(若用 VS2019,改为-G "Visual Studio 16 2019");-A x64:强制生成 64 位工程(Open3D 不支持 32 位,此参数必须加);-DCMAKE_INSTALL_PREFIX:指定编译完成后 库的安装路径 (后续自己的 C++ 工程会引用此路径下的头文件和库文件,建议自定义绝对路径,如E:\Open3D\install)。
出现依赖下载失败的情况,看下文依赖下载失败的通用解决方法这小节。

关键注意事项
- 若 CMake 提示 找不到 Visual Studio,需检查 VS 是否安装了「使用C++的桌面开发」工作负载,或重启终端让环境变量生效;
- Open3D 编译依赖库下载失败,网络环境限制导致无法正常访问 GitHub 下载,推荐「手动下载 + 校验 + 指定路径」的方案(彻底规避网络问题,适配所有受限环境);
- 配置过程中会自动下载部分编译依赖,保持网络畅通,无红色报错即表示 CMake 配置成功。
依赖下载失败的通用解决方法
Open3D 编译依赖多个第三方库,若后续再遇到类似的SSL 下载失败 + 哈希不匹配错误,可直接复用本次的通用解决方案,步骤统一为:
-
从错误日志中提取3个关键信息:依赖库名 (如qhull)、版本号 (如v8.0.2)、标准SHA256值 ;

-
删除
3rdparty_downloads/依赖库名目录下的所有残留文件;

-
手动下载对应版本的官方源码包,校验SHA256值与标准值一致;
bash# 切换到文件所在目录 # 执行PowerShell命令计算SHA256哈希(Windows自带,无需安装) # 文件名 'qhull-8.0.2.tar.gz' powershell -Command "Get-FileHash -Path 'qhull-8.0.2.tar.gz' -Algorithm SHA256"
-
将校验通过的文件放到
3rdparty_downloads/依赖库名目录下,并修改名称v8.0.2.tar.gz;

-
清理Build目录,重新执行CMake即可。

编译 Open3D 源码(Visual Studio 执行编译)
CMake 配置成功后,build 目录下会生成 Open3D.sln 解决方案文件,编译有两种方式(推荐方式1,更直观):
方式1:Visual Studio 图形界面编译
-
以管理员方式用对应版本的 Visual Studio 打开(如 VS2022)
build/Open3D.sln; -
顶部菜单栏选择 编译配置:
- 调试版本:Debug + x64(开发调试用,带调试信息,运行速度稍慢);
- 发布版本:Release + x64 (最终项目用,无调试信息,运行速度快);
(建议先编译 Release 版本,日常开发足够,若需要调试再编译 Debug 版本);
-
右键点击解决方案资源管理器中的 INSTALL 项目 → 选择 生成 (核心!编译
INSTALL会自动将头文件、库文件拷贝到-DCMAKE_INSTALL_PREFIX指定的安装路径);

出现缺失依赖包下载缓慢的情况,看下文手动下载缺失依赖包的通用解决方法这小节。
-
等待编译完成:Open3D 源码较大,编译约10-30分钟(取决于电脑配置),输出窗口无红色报错、提示「生成成功」 即表示编译完成。

windows下可能出现出现以下错误:

修改对应代码位置就可以解决。
cpp
return str(message[slice(0, cut_length, 1)]) + str("✄✄✄")
+ str(message[slice(-cut_length, static_cast<ssize_t>(len(message)), 1)]);
// 替换为
return str(message[slice(0, cut_length, 1)]) + str("cut_cut_cut" )+ str(message[slice(-cut_length, static_cast<ssize_t>(len(message)), 1)]);
方式2:命令行编译(无需打开 VS)
在 build 目录下打开 CMD/PowerShell,执行以下命令(直接编译 Release 版本):
cmd
cmake --build . --config Release --target INSTALL -j8
--config Release:指定编译 Release 版本(改为 Debug 即编译调试版本);--target INSTALL:编译并安装到指定路径;-j8:指定 8 线程编译(根据自己电脑的 CPU 核心数调整,如 4 核写-j4,加速编译)。

出现缺失依赖包下载缓慢的情况,看下文手动下载缺失依赖包的通用解决方法这小节。
输出窗口无红色报错 即表示编译完成。

windows下可能出现出现以下错误:

修改对应代码位置就可以解决。
cpp
return str(message[slice(0, cut_length, 1)]) + str("✄✄✄")
+ str(message[slice(-cut_length, static_cast<ssize_t>(len(message)), 1)]);
// 替换为
return str(message[slice(0, cut_length, 1)]) + str("cut_cut_cut" )+ str(message[slice(-cut_length, static_cast<ssize_t>(len(message)), 1)]);
手动下载缺失依赖包的通用解决方法
核心问题仍是国内网络访问 GitHub/Codeload 的 HTTPS 资源不稳定,同样的Open3D 的所有第三方依赖均有固定下载地址和缓存目录,直接手动下载符合版本的压缩包放入指定目录,CMake 会自动跳过下载、直接验证并使用,无需修改任何配置。
解决方案和 "依赖下载失败的通用解决方法" 有异曲同工之处。

-
下载指定版本的依赖包(保留原格式,不要解压):打开浏览器,访问以下官方地址,下载对应压缩包。

有些依赖包,需要看清楚是不是Windows系统的依赖包。
-
放入 Open3D 的依赖缓存目录(关键:路径必须完全匹配):Open3D 会将所有第三方依赖的下载缓存放在 源码根目录
Open3D/3rdparty_downloads/下,按依赖名分文件夹 (与Open3D/3rdparty/下的文件夹同名,可能需要手动创建),将对应的压缩包(文件需重命名)放入。

打开文佳夹时一般有已经开始自动下载但没下载完的包,将手动下载的包重命名(与自动下载的包名一致)并替换。有时候一个cmake中有多个URL链接,这个也可以作为一种参考,知道下载那个URL链接对应的包。
-
清除无效构建缓存(避免CMake读取旧错误信息): 进入
build目录(如E:\Open3D\Open3D\build\)删除 _deps 文件夹(CMake的依赖构建临时缓存,删除后会重新生成,无任何影响)。

建议所有依赖包都下载处理完以后,再删除文件夹以及后续的操作。假如还有位置错误,删除整个build重新来。
-
重新执行编译。
安装验证(编译产物检查)
编译完成后,进入第四步指定的安装路径(如 E:\Open3D\install),会自动生成 4 个核心文件夹,结构如下:

E:\Open3D\install
├── include/ # 所有 Open3D C++ 头文件(如 Open3D/Visualization/Visualizer.h)
├── lib/ # 静态库(.lib)和动态库(.dll)文件
├── bin/ # 可执行文件依赖的动态库(.dll)
└── share/ # 配置文件、资源文件(无需关注)
- 若缺少
include或lib文件夹,说明编译未执行INSTALL目标,返回重新编译INSTALL项目; - 此安装路径是后续自己的 C++ 工程引用 Open3D 的核心路径,务必记牢。
验证 Open3D 依赖(Visual Studio)
新建 C++ 工程并配置 Open3D 依赖,编译安装完成后,以 Visual Studio 2022 新建空项目 为例,快速配置 Open3D 依赖,编写第一个测试程序。
新建空项目
- VS2022 → 创建新项目 → 选择 空项目 → 项目命(如 Open3DTest)→ 选择位置(如 E:\Open3D) → 创建;

- 右键项目 → 添加 → 新建项 →命名C++ 文件(如 main.cpp)→添加 。

配置项目属性(核心,分Debug/Release)
右键项目 → 属性 → 配置属性,按以下步骤配置(注意配置平台为 x64,Debug 和 Release 版本需分别配置,路径一致):
-
配置包含目录(头文件路径)
-
路径:C/C++ → 常规 → 附加包含目录;
-
添加:Open3D 安装路径下的
include目录,如E:\Open3D\install\include E:\Open3D\install\include\open3d\3rdparty -
勾选「从父级或项目默认设置继承」。

-
-
配置库目录(.lib 文件路径)
-
路径:链接器 → 常规 → 附加库目录;
-
添加:Open3D 安装路径下的
lib目录,如E:\Open3D\install\lib -
勾选「继承自父项或项目默认值」。

-
-
配置附加依赖项(指定需要链接的 .lib 文件)
-
路径:链接器 → 输入 → 附加依赖项;
-
添加 Open3D 核心库文件(Release 版本,Debug 版本库名后加
d,如Open3Dd.lib):Open3D.lib Open3D_3rdparty_assimp.lib Open3D_3rdparty_blas_mkl_core.lib Open3D_3rdparty_blas_mkl_intel_ilp64.lib Open3D_3rdparty_blas_mkl_sequential.lib Open3D_3rdparty_blas_mkl_tbb_thread.lib Open3D_3rdparty_civetweb_civetweb.lib Open3D_3rdparty_civetweb_civetweb-cpp.lib Open3D_3rdparty_curl.lib Open3D_3rdparty_embree_embree_avx.lib Open3D_3rdparty_embree_embree_avx2.lib Open3D_3rdparty_embree_embree4.lib Open3D_3rdparty_embree_lexers.lib Open3D_3rdparty_embree_math.lib Open3D_3rdparty_embree_simd.lib Open3D_3rdparty_embree_sys.lib Open3D_3rdparty_embree_tasking.lib Open3D_3rdparty_filament_backend.lib Open3D_3rdparty_filament_bluegl.lib Open3D_3rdparty_filament_bluevk.lib Open3D_3rdparty_filament_filabridge.lib Open3D_3rdparty_filament_filaflat.lib Open3D_3rdparty_filament_filament.lib Open3D_3rdparty_filament_filameshio.lib Open3D_3rdparty_filament_geometry.lib Open3D_3rdparty_filament_ibl.lib Open3D_3rdparty_filament_image.lib Open3D_3rdparty_filament_ktxreader.lib Open3D_3rdparty_filament_meshoptimizer.lib Open3D_3rdparty_filament_smol-v.lib Open3D_3rdparty_filament_utils.lib Open3D_3rdparty_filament_vkshaders.lib Open3D_3rdparty_fmt.lib Open3D_3rdparty_glew.lib Open3D_3rdparty_glfw.lib Open3D_3rdparty_imgui.lib Open3D_3rdparty_ipp_ipp_iw.lib Open3D_3rdparty_ipp_ippccmt.lib Open3D_3rdparty_ipp_ippccmt_tl_tbb.lib Open3D_3rdparty_ipp_ippcoremt.lib Open3D_3rdparty_ipp_ippcoremt_tl_tbb.lib Open3D_3rdparty_ipp_ippcvmt.lib Open3D_3rdparty_ipp_ippcvmt_tl_tbb.lib Open3D_3rdparty_ipp_ippimt.lib Open3D_3rdparty_ipp_ippimt_tl_tbb.lib Open3D_3rdparty_ipp_ippsmt.lib Open3D_3rdparty_ipp_ippvmmt.lib Open3D_3rdparty_jpeg.lib Open3D_3rdparty_jsoncpp.lib Open3D_3rdparty_liblzf.lib Open3D_3rdparty_png.lib Open3D_3rdparty_qhull_r.lib Open3D_3rdparty_qhullcpp.lib Open3D_3rdparty_rply.lib Open3D_3rdparty_tinyfiledialogs.lib Open3D_3rdparty_uvatlas.lib Open3D_3rdparty_vtk_vtkCommonCore-9.1.lib Open3D_3rdparty_vtk_vtkCommonDataModel-9.1.lib Open3D_3rdparty_vtk_vtkCommonExecutionModel-9.1.lib Open3D_3rdparty_vtk_vtkCommonMath-9.1.lib Open3D_3rdparty_vtk_vtkCommonMisc-9.1.lib Open3D_3rdparty_vtk_vtkCommonSystem-9.1.lib Open3D_3rdparty_vtk_vtkCommonTransforms-9.1.lib Open3D_3rdparty_vtk_vtkFiltersCore-9.1.lib Open3D_3rdparty_vtk_vtkFiltersGeneral-9.1.lib Open3D_3rdparty_vtk_vtkFiltersModeling-9.1.lib Open3D_3rdparty_vtk_vtkFiltersSources-9.1.lib Open3D_3rdparty_vtk_vtkkissfft-9.1.lib Open3D_3rdparty_vtk_vtkpugixml-9.1.lib Open3D_3rdparty_vtk_vtksys-9.1.lib Open3D_3rdparty_webrtc_webrtc.lib Open3D_3rdparty_webrtc_webrtc_extra.lib Open3D_3rdparty_zeromq.lib Open3D_3rdparty_zlib.lib tbb12.lib opengl32.libopengl32.lib是 Windows 系统提供的标准 OpenGL 库,所有依赖 OpenGL 的程序都需要链接它。
-
勾选「继承自父项或项目默认值」。

-
-
统一运行时库配置,MT是静态链接运行时库,MD是动态链接运行时库,两者不能混合使用。
- 右键项目「Open3DTest」→「属性」→「C/C++」→「代码生成」;
- 找到「运行库」,下拉选择「多线程 (/MT)」(与 Open3D 一致);
- 点击「确定」保存设置。

与 Open3D 一致验证:同理查看 Open3D 的「属性」→「C/C++」→「代码生成」→「运行库」;
-
将项目编译标准改为 C++17(必做),Open3D 0.19.0 版本深度依赖 C++17 特性,必须将项目的 C++ 语言标准设置为 C++17。
- 右键项目「Open3DTest」→「属性」→「C/C++」→「语言」;
- 找到「C++ 语言标准」,下拉选择「ISO C++17 标准 (/std:c++17)」;
- 点击「确定」保存设置。

-
(可选)配置动态库路径(避免运行时找不到 .dll),Open3D 的 .dll 文件在
install/bin目录下,运行程序时需要加载,有3种方式:- 把
install/bin下的所有 .dll 文件复制到自己项目的 可执行文件输出目录 (如x64/Release); - 将
D:\Open3D\install\bin添加到 系统环境变量 Path(永久生效,推荐); - VS 项目属性 → 调试 → 环境 → 添加
PATH=E:\Open3D\install\bin;%PATH%(仅当前项目生效)。
- 把
编写测试代码(验证配置成功)
在 main.cpp 中写入以下代码(创建一个点云并可视化,核心功能验证):
cpp
#include <Open3D/Open3D.h>
#include <Open3D/Visualization/visualizer/Visualizer.h>
int main() {
// 创建一个空的点云对象
auto pcd = std::make_shared<open3d::geometry::PointCloud>();
// 添加3个点(x, y, z)
pcd->points_.emplace_back(0.0, 0.0, 0.0);
pcd->points_.emplace_back(1.0, 0.0, 0.0);
pcd->points_.emplace_back(0.0, 1.0, 0.0);
// 给点云设置颜色(红色)
pcd->colors_.emplace_back(1.0, 0.0, 0.0);
pcd->colors_.emplace_back(1.0, 0.0, 0.0);
pcd->colors_.emplace_back(1.0, 0.0, 0.0);
// 可视化点云
open3d::visualization::Visualizer vis;
vis.CreateVisualizerWindow("Open3D Test", 800, 600);
vis.AddGeometry(pcd);
vis.Run();
vis.DestroyVisualizerWindow();
return 0;
}
运行测试程序
- 顶部菜单栏选择 Release + x64;
- 点击「本地Windows调试器」或按
F5运行; - 若弹出可视化窗口,显示3个红色点,说明 Open3D 编译、配置全部成功 !

总结
详细讲解了从环境准备、源码获取到编译安装、工程配置的全流程步骤,适配最新版 Open3D 源码,兼容 Visual Studio 2019/2022(64位)。