ORB-SLAM3 在 Windows 的实现(全网最详细,配有附相关库夸克下载链接)
easter egg:boost、glew、 opencv、cmke夸克下载
链接:https://pan.quark.cn/s/c3b13d4ef01f?pwd=cE4z
提取码:cE4z
orbslam3源码(适配版):orb_slam3_Windows: 在Windows部署orb_slam3
一、编译 Boost 库(适用于 Visual Studio 2022)
1.1 下载 Boost 源码
前往官方镜像地址下载 Boost 1.83.0 版本源码包:
🔗 下载链接:Boost 1.88.0
https://www.boost.org/releases/1.88.0/
将压缩包解压到Thirdparty目录下(如"A:\ORB-SLAM3\orbslam3\Thirdparty\boost_1_88_0")
1.2 生成构建工具 b2.exe
进入Boost目录,运行 Bootstrap 脚本,以生成 Boost 构建系统所需的核心工具 b2.exe:
执行成功后,你会在当前目录看到 b2.exe生成

1.3 编译 Boost 静态库
在当前目录打开终端,运行以下命令开始编译 64位、静态链接、发布版本 的 Boost 库:
.\b2.exe stage toolset=msvc-14.3 address-model=64 link=static runtime-link=static -j4 release

🔍 参数说明:
| 参数 | 含义 |
|---|---|
stage | 将编译好的库输出到 stage\lib 目录 |
toolset=msvc-14.3 | 使用 Visual Studio 2022 编译器(对应 MSVC v143) |
address-model=64 | 编译 64 位版本 |
link=static | 生成静态库(.lib) |
runtime-link=static | 静态链接 C++ 运行时,减少外部 DLL 依赖 |
-j4 | 使用 4 个线程并行编译(可按 CPU 核心数调整,如 -j8) |
release | 编译优化后的发布版本 |
✅ 注意:我使用的是
msvc-14.3(VS2022),若你使用的是 VS2019,请务必改为msvc-14.2
编译完成后你将在boost目录下看到stage文件夹
二、安装与配置OpenCV库
2.1 下载OpenCV库
从OpenCV官网下载Windows平台下的exe文件(也可以从我的云盘中下),然后安装即可
Releases - OpenCV
https://opencv.org/releases/


2.2 配置OpenCV环境变量
1、记住OpenCV的安装路径

2、打开电脑设置->系统->系统信息->高级系统设置->环境变量

进入环境变量页面后,双击系统变量下的Path,进入配置页面

在配置页面点击新建,把opencv目录下的opencv\build\x64\vc14\bin地址复制到path中


重启以后环境变量即生效
2.3 在VS当中部署OpenCV
三、编译 glew 库(后续编译Pangolin用到)
3.1 下载 GLEW 源码
访问官网:https://glew.sourceforge.net/
下载 GLEW 2.1.0 的源码包(例如 glew-2.1.0.zip)
解压到本地目录(我为了方便放在了Thirdparty目录下)例如:"A:\ORB-SLAM3\orbslam3\Thirdparty\glew-2.1.0"

3.2 打开 Visual Studio 工程
进入目录:glew-2.1.0\build\vc12

用 Visual Studio 2013 或更高版本(兼容 vc12 工具集)打开 glew.sln
💡 如果你使用的是 VS2019/VS2022,可能会提示升级项目平台工具集,可以接受升级。
3.3 配置编译目标
你需要分别编译 Debug 和 Release 两种配置下的两个项目:
glew_static → 生成 静态库(.lib) ——Pangolin 通常链接这个
glew_shared → 生成 动态库(.dll + .lib)
编译步骤:
在 Visual Studio 中,选择 Configuration(配置): Release,Platform(平台): x64
右键 glew_static → Build(生成)
右键 glew_shared → Build(生成)

📁 输出位置:
静态库(glew32s.lib)默认生成在 glew-2.1.0\lib\Release\x64
动态库(glew32.dll 和 glew32.lib)生成在 glew-2.1.0\bin\Release\x64

3.4. (可选)将 DLL 加入系统路径
如果你运行依赖 GLEW 动态库的程序时提示“找不到 glew32.dll”,可以:
将 glew32.dll 复制到你的可执行文件目录(推荐)
或复制到 C:\Windows\System32(仅限 64 位 DLL;32 位应放 SysWOW64)
⚠️ 不建议随意往 System32 放 DLL,容易污染系统。优先放在程序同目录。
四、编译 Pangolin 库
4.1 准备工作
1) 确认依赖已就绪
-
已安装 Visual Studio 2022(含 C++ 桌面开发组件)
-
已成功编译 GLEW 2.1.0 静态库(Release, x64)
-
头文件路径:
A:\ORB-SLAM3\orbslam3\Thirdparty\glew-2.1.0\include -
静态库路径:
A:\ORB-SLAM3\orbslam3\Thirdparty\glew-2.1.0\lib\Release\x64\glew32s.lib
-
⚠️ 必须是
glew32s.lib(带s),不是glew32.lib!
2)新建 build 文件夹
进入 Pangolin 源码目录:A:\ORB-SLAM3\orbslam3\Thirdparty\Pangolin
在该目录下新建文件夹 build

✅ 目的:采用 out-of-source 构建,避免污染源码。
4.2 CMake-GUI 配置
1) 设置源码与构建路径
-
Where is the source code:
A:/ORB-SLAM3/orbslam3/Thirdparty/Pangolin -
Where to build the binaries:
A:/ORB-SLAM3/orbslam3/Thirdparty/Pangolin/build

💡 路径建议使用正斜杠
/或双反斜杠\\。
2) 首次 Configure
- 点击 Configure
- 选择:Generator:
Visual Studio 17 2022(根据自己VS版本选择)Platform:x64 - 点击 Finish

3) 取消不必要的外部依赖项
取消勾选以下选项(关键!):

| 选项 | 说明 |
|---|---|
BUILD_EXAMPLES | 不需要示例程序 |
BUILD_EXTERN_GLEW | 使用系统或已安装的 |
BUILD_EXTERN_LIBJPEG | 使用系统或已安装的 JPEG 库 |
BUILD_EXTERN_LIBPNG | 同上 |
✅ 目的:强制 Pangolin 使用你提供的 GLEW,而非自动下载旧版。
4) 手动指定 GLEW 路径
再次点击 Configure,会出现红色错误(找不到 GLEW)。

手动填写以下两个变量:把安装的GLEW的include目录选上,在第二个选项里把GLEW的x64的静态lib文件glew32s.lib选上

| CMake 变量 | 值(根据你的实际路径修改) |
|---|---|
GLEW_INCLUDE_DIR | A:\ORB-SLAM3\orbslam3\Thirdparty\glew-2.1.0\include |
GLEW_LIBRARY | A:\ORB-SLAM3\orbslam3\Thirdparty\glew-2.1.0\lib\Release\x64\glew32s.lib |
🔑 关键检查:
- 路径正确
- 文件名是
glew32s.lib(静态库)- 使用 Release 版本(与后续编译配置一致)
5) 完成生成
- 再次点击 Configure → 应显示 Configuring done
- 点击 Generate → 显示 Generating done
- 关闭 CMake-GUI

4.3 在Visual Studio 编译Pangolin
1) 打开解决方案
- 进入
Pangolin\build目录 - 双击打开
Pangolin.sln

2 )设置全局编译配置
- 打开
Pangolin.sln后,在 Visual Studio 顶部工具栏:- Solution Configurations(解决方案配置) → 选择
Release - Solution Platforms(解决方案平台) → 选择
x64
- Solution Configurations(解决方案配置) → 选择

在 Solution Explorer(解决方案资源管理器) 中:
- 右键
Pangolin(不是 ALL_BUILD 或 INSTALL) - 选择 Properties(属性)
⚠️ 重要:确保左上角的 Configuration = Release,Platform = x64
(VS 会为不同配置保存独立属性,改错配置无效!)

1、配置项 1:配置属性
-
配置属性 → 常规(General) → 配置类型(Configuration Type)→ 选择
静态库 (.lib)

- 配置属性 → 高级(Advanced) → 目标文件扩展名(Target Extension)→ 填
(.lib)

2、配置项 2:运行时库(关键!)
- C/C++ → 代码生成 → 运行库 → 选择
多线程 (/MT)

🔍 为什么必须是 /MT?
/MT= 静态链接 C 运行时库(CRT)/MD= 动态链接 CRT(需vcruntimeXXX.dll)✅ 必须与 ORB-SLAM3、Boost、OpenCV 统一为
/MT(静态 CRT)
3、配置项 3:添加 GLEW_STATIC 宏(极易遗漏!)
- C/C++ → 预处理器(Preprocessor) → 预处理器定义(Preprocessor Definitions)
→ 在末尾添加:GLEW_STATIC

🔍 为什么?
当你使用 GLEW 静态库(glew32s.lib) 时,必须定义此宏。否则 GLEW 头文件会默认按动态库方式导出符号,导致链接错误:error LNK2019: unresolved external symbol __imp_glewInit
3)编译项目
- 点击 应用→确认 保存属性
- 回到 Solution Explorer(解决方案管理器):右键
ALL_BUILD→ 点击Build(生成)

- 等待编译完成(输出 窗口显示
生成: 3 成功,1 失败,0 最新,0 已跳过)

忽视一个报错,工程会报错,但是最后可以生成一个输出文件
A:\ORB-SLAM3\orbslam3\Thirdparty\Pangolin\lib\Release\pangolin.lib

✅ 此即 ORB-SLAM3 所需的静态库。
五、 编译DBoW2库
5.1 修改DBoW2库的 CMakeLists.txt 文件
1)进入 Thirdparty/DBoW2 目录,打开 CMakeLists.txt 文件

2)手动指定 OpenCV 的安装路径的build 目录
(我的opencv目录为:"C:/opencv341/opencv/build")

5.2 CMake-GUI 配置
1)新建 build 文件夹
进入 DBoW2 源码目录:A:\ORB-SLAM3\orbslam3\Thirdparty\DBoW2
在该目录下新建文件夹 build

2)生成的项目文件DBoW2.sln
-
打开 CMake-GUI
-
设置:
- Where is the source code:
A:/ORB-SLAM3/orbslam3/Thirdparty/DBoW2 - Where to build the binaries:
A:/ORB-SLAM3/orbslam3/Thirdparty/DBoW2/build
- Where is the source code:

-
点击 Configure
- Generator:
Visual Studio 17 2022 - Platform:
x64 - 点击 Finish
- Generator:

3)点击 Generate → 生成 DBoW2.sln

✅ 此时在build目录,已经生成的项目文件DBoW2.sln。
5.3 在Visual Studio 编译 DBoW2
1) 打开解决方案
- 进入 DBoW2
\build目录 - 双击打开 DBoW2
.sln

2 )设置全局编译配置
- 打开 DBoW2
.sln后,在 Visual Studio 顶部工具栏:- Solution Configurations(解决方案配置) → 选择
Release - Solution Platforms(解决方案平台) → 选择
x64
- Solution Configurations(解决方案配置) → 选择

在 Solution Explorer(解决方案资源管理器) 中:
- 右键 DBoW2(不是 ALL_BUILD )
- 选择 Properties(属性)
⚠️ 重要:确保左上角的 Configuration = Release,Platform = x64
(VS 会为不同配置保存独立属性,改错配置无效!)

1、配置项 1:配置属性
-
配置属性 → 常规(General) → 配置类型(Configuration Type)→ 选择
静态库 (.lib)

- 配置属性 → 高级(Advanced) → 目标文件扩展名(Target Extension)→ 填
(.lib)

- 配置属性 → VC++ 目录 → 包含目录→添加opencv的include目录以及include下的opencv和opencv2目录。如:
C:\opencv341\opencv\build\include
C:\opencv341\opencv\build\include\opencv
C:\opencv341\opencv\build\include\opencv2

- 配置属性 → VC++ 目录 → 库目录→添加opencv的include\x64\vc15\lib。如:
C:\opencv341\opencv\build\x64\vc15\lib

2、配置项 2:运行时库(关键!)
- C/C++ → 代码生成 → 运行库 → 选择
多线程 (/MT)

🔍 为什么必须是 /MT?
/MT= 静态链接 C 运行时库(CRT)/MD= 动态链接 CRT(需vcruntimeXXX.dll)✅ 必须与 ORB-SLAM3、Boost、OpenCV 统一为
/MT(静态 CRT)
3) 编译DBoW2
- 右键 ALL_BUILD → Build(生成)

- 等待编译完成(输出 窗口显示
生成: 3 成功,0 失败,0 最新,0 已跳过)

- 成功生成:
DBoW2\build\Release\DBoW2.lib

✅ 此即 ORB-SLAM3 所需的静态库。
六、编译 g2o 库
6.1 CMake-GUI 配置
1)新建 build 文件夹
进入 DBoW2 源码目录:A:\ORB-SLAM3\orbslam3\Thirdparty\g2o
在该目录下新建文件夹 build

2)生成的项目文件g2o.sln
-
打开 CMake-GUI
-
设置:
- Where is the source code:
A:/ORB-SLAM3/orbslam3/Thirdparty/g2o - Where to build the binaries:
A:/ORB-SLAM3/orbslam3/Thirdparty/g2o/build
- Where is the source code:

-
点击 Configure
- Generator:
Visual Studio 17 2022 - Platform:
x64 - 点击 Finish
- Generator:

3)点击 Generate → 生成 g2o.sln

✅ 此时在build目录,已经生成的项目文件g2o.sln。
6.2 在Visual Studio 编译 g2o
1) 打开解决方案
- 进入 g2o
\build目录 - 双击打开 g2o
.sln

2 )设置全局编译配置
- 打开 g2o
.sln后,在 Visual Studio 顶部工具栏:- Solution Configurations(解决方案配置) → 选择
Release - Solution Platforms(解决方案平台) → 选择
x64
- Solution Configurations(解决方案配置) → 选择

在 Solution Explorer(解决方案资源管理器) 中:
- 右键 g2o(不是 ALL_BUILD )
- 选择 Properties(属性)
⚠️ 重要:确保左上角的 Configuration = Release,Platform = x64
(VS 会为不同配置保存独立属性,改错配置无效!)

1、配置项 1:配置属性
-
配置属性 → 常规(General) → 配置类型(Configuration Type)→ 选择
静态库 (.lib)

- 配置属性 → 高级(Advanced) → 目标文件扩展名(Target Extension)→ 填
(.lib)

2、配置项 2:运行时库(关键!)
- C/C++ → 代码生成 → 运行库 → 选择
多线程 (/MT)

🔍 为什么必须是 /MT?
/MT= 静态链接 C 运行时库(CRT)/MD= 动态链接 CRT(需vcruntimeXXX.dll)✅ 必须与 ORB-SLAM3、Boost、OpenCV 统一为
/MT(静态 CRT)
3、配置项 3: 添加预处理器定义
- C/C++ → 预处理器 → 预处理器定义 → 添加
WINDOWS

3) 编译g2o
- 右键 ALL_BUILD → Build(生成)

- 等待编译完成(输出 窗口显示
生成: 3 成功,0 失败,0 最新,0 已跳过)

- 成功生成:
\Thirdparty\g2o\build\Release\g2o.lib

✅ 此即 ORB-SLAM3 所需的静态库。
七、ORB-SLAM3 编译
7.1 准备工作
确保以下组件已正确安装,并记录路径:
| 组件 | 版本 | 路径示例 | 说明 |
|---|---|---|---|
| OpenCV | 3.4.1 | C:/opencv341/opencv/build | 高版本可能不兼容 |
| Boost | 1.88.0 | A:/ORB-SLAM3/orbslam3/Thirdparty/boost_1_88_0 | 需用 VS2022(vc143)编译为静态库 |
| Eigen3 | ≥3.1.0 | .../Thirdparty/eigen3 | 仅头文件,解压即可 |
| Pangolin | 最新版 | .../Thirdparty/Pangolin | 需手动编译 |
| DBoW2 | — | .../Thirdparty/DBoW2/lib/Release/DBoW2.lib | 需手动编译 |
| g2o | — | .../Thirdparty/g2o/build/Release/g2o.lib | 需手动编译 |
⚠️ 所有
.lib文件必须存在!建议先完成 DBoW2、g2o、Pangolin 的编译。
7.2 修改 CMakeLists.txt
1) 设置 OpenCV 路径(关键!)
找到原 OpenCV 查找代码,替换为:
# === 手动指定 OpenCV ===
set(OpenCV_DIR "C:/opencv341/opencv/build")
find_package(OpenCV 3.4.1 QUIET)
# ======================

2)更新 include 目录
在 include_directories(...) 中确保包含:
include_directories(
${PROJECT_SOURCE_DIR}
${PROJECT_SOURCE_DIR}/include
${PROJECT_SOURCE_DIR}/include/CameraModels
${EIGEN3_INCLUDE_DIR}
${Pangolin_INCLUDE_DIRS}
${PROJECT_SOURCE_DIR}/Thirdparty/boost_1_88_0
${PROJECT_SOURCE_DIR}/Thirdparty/DBoW2
${PROJECT_SOURCE_DIR}/Thirdparty/g2o
)

3)更新链接库路径
在 target_link_libraries(...) 中使用你的实际路径:
target_link_libraries(${PROJECT_NAME}
${OpenCV_LIBS}
${EIGEN3_LIBS}
${Pangolin_LIBRARIES}
${PROJECT_SOURCE_DIR}/Thirdparty/DBoW2/lib/Release/DBoW2.lib
${PROJECT_SOURCE_DIR}/Thirdparty/g2o/build/Release/g2o.lib
${PROJECT_SOURCE_DIR}/Thirdparty/boost_1_88_0/stage/lib/libboost_serialization-vc143-mt-s-x64-1_88.lib
)

4) 添加宏定义(可选但推荐)
在 add_definitions(-DCOMPILEDWITHC11) 下方加:
add_definitions(-DWINDOWS)

7.3 使用 CMake-GUI 生成 VS 工程
1)新建build文件夹
ORB_SLAM项目目录下面新建build文件夹

2)CMake-GUI配置
1. 打开 CMake-GUI
设置:
- Where is the source code:
A:/ORB-SLAM3/orbslam3 - Where to build the binaries:
A:/ORB-SLAM3/orbslam3/build
2. 点击 Configure
- 选择 Visual Studio 17 2022
- 平台选 x64
3. 点击 Finish

4. 等待配置完成(应看到 Configuring done) 成功后点 Generate

7.4 配置 Visual Studio 项目属性
1) 打开 ORB_SLAM3.sln
进入 build 文件夹,打开 ORB_SLAM3.sln

2)属性配置
1、在 VS 顶部工具栏设置:
- Solution Configurations:
Release - Solution Platforms:
x64

2、在 解决方案资源管理器 中右键 ORB_SLAM3 → 属性
配置如下:
| 类别 | 设置项 | 值 |
|---|---|---|
| 常规 | 配置类型 | 静态库 (.lib) |
| 高级 | 目标文件扩展名 | .lib |
| C/C++ → 代码生成 | 运行库 | 多线程 (/MT) |
| C/C++ → 预处理器 | 预处理器定义 | 添加:WINDOWSCOMPILEDWITHC11 |
💡 这些设置确保与 Boost、OpenCV 的 /MT 编译方式一致,避免链接冲突。
7.5 手动添加依赖路径(重要!)
虽然 CMake 已设置,但 Windows 下常需在 VS 中显式添加:
1) VC++ 目录 → 包含目录
添加:
opencv库
C:\opencv341\opencv\build\includeC:\opencv341\opencv\build\include\opencvC:\opencv341\opencv\build\include\opencv2
- boost库
A:\ORB-SLAM3\orbslam3\Thirdparty\boost_1_88_0

2)VC++ 目录 → 库目录
添加opencv和boost的库目录:
C:\opencv341\opencv\build\x64\vc15\libA:\ORB-SLAM3\orbslam3\Thirdparty\boost_1_88_0\stage\lib

3) C/C++ → 常规 → 附加包含目录
添加 DBoW2和g2o库的路径:
A:\ORB-SLAM3\orbslam3\Thirdparty\DBoW2A:\ORB-SLAM3\orbslam3\Thirdparty\g2o

✅ 这一步可防止“找不到头文件”或“链接错误”。
7.6 生成 ORB_SLAM3.lib
- 确认所有配置无误
- 右键
ORB_SLAM3项目 → 生成
- 成功后会在
build/Release/下生成ORB_SLAM3.lib
八、编译示例程序(如stereo_inertial_euroc)
- 同样需要在 VS 中配置stereo_inertial_euroc项目的属性(/MT、附加包含目录、附加依赖项等)
- 添加
usleep兼容代码(Windows 无 usleep) - 复制
glew.dll到可执行文件目录 - 解压
Vocabulary/ORBvoc.txt.tar.gz - 下载 EuRoC 数据集并运行
具体stereo_inertial_euroc运行过程请参考我下一篇文章
✅ 常见问题排查
| 问题 | 解决方案 |
|---|---|
LNK2038: 检测到运行时库不匹配 | 所有库和项目必须统一使用 /MT(非 /MD) |
无法打开 DBoW2.lib | 检查路径是否存在,是否拼写错误 |
fatal error: boost/xxx.hpp not found | 检查 include_directories 是否包含 boost 根目录 |
| CMake 找不到 Pangolin | 手动设置 Pangolin_DIR 指向其 build 目录 |
更多推荐




所有评论(0)