You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows10安装Ceres-solver遇路径超限,CMAKE_OBJECT_PATH_MAX设置无效

解决Windows 10下Ceres-solver编译的MAX_PATH路径过长问题

问题场景

  • 工作用Windows 10电脑受系统MAX_PATH(260字符)限制,无法修改系统上限
  • 编译Ceres-solver时,CMake生成的文件路径过长,示例路径:
    build\internal\ceres\ba_iterschur_acceleratesparse_clustjacobi_auto_threads_test.dir\Release\ba_iters.5B2CC283.tlog\ba_iterschur_acceleratesparse_clustjacobi_auto_threads_test.lastbuildstate
  • 编译时报错:

C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VC\v160\Microsoft.CppBuild.targets(382,5): error MSB3491: Could not write lines to file "ba_iterschur_acceleratesparse_clustjacobi_auto_threads_test.dir\Release\ba_iters.5B2CC283.tlog\ba_iterschur_acceleratesparse_clustjacobi_auto_threads_test.lastbuildstate". Path: ba_iterschur_acceleratesparse_clustjacobi_auto_threads_test.dir\Release\ba_iters.5B2CC283.tlog\ba_iterschur_acceleratesparse_clustjacobi_auto_threads_test.lastbuildstate exceeds the OS max path limit. The fully qualified file name must be less than 260 characters. [R:\Data\ceres4\ceres-solver\build-x64-Dynamic\internal\ceres\generated_bundle_adjustment_tests\ba_iterschur_acceleratesparse_clustjacobi_auto_threads_test.vcxproj]

已尝试的无效方法

在Ceres-solver的CMakeLists.txt中添加以下代码,但未解决问题:

if (WIN32)
  set(CMAKE_OBJECT_PATH_MAX 260 CACHE INTERNAL "Max path length")
  message(STATUS "CMAKE_OBJECT_PATH_MAX is set to: ${CMAKE_OBJECT_PATH_MAX}")
endif()

该值已写入CMakeCache.txt:

//Max path length
CMAKE_OBJECT_PATH_MAX:INTERNAL=260

可行解决方案

1. 缩短根目录路径

将Ceres-solver源码和编译build目录移到磁盘根目录下的短路径中,例如:

  • 源码目录:C:\ceres\
  • 编译目录:C:\ceres-build\
    直接减少基础路径长度,从根源避免后续生成文件的路径超出260字符限制。

2. 关闭测试编译(最有效)

在CMake配置时添加参数,关闭自动生成测试目标——这类超长路径大多来自自动生成的测试文件(如报错中的ba_iterschur_xxx测试):

-DCERES_BUILD_TESTS=OFF
-DCERES_BUILD_EXAMPLES=OFF
-DCMAKE_BUILD_TYPE=Release

同时可附加参数缓解文件写入问题:

-DCMAKE_CXX_FLAGS="/FS"

3. 手动缩短测试目标名称(需保留测试时用)

如果必须保留测试功能,找到Ceres-solver中生成长名称测试的脚本(通常在internal/ceres/generated_bundle_adjustment_tests/目录下的CMake文件),将自动生成的测试名称手动缩短,比如把ba_iterschur_acceleratesparse_clustjacobi_auto_threads_test改为ba_schur_test,减少路径中的字符数。

4. 使用NTFS符号链接缩短路径

以管理员权限打开命令提示符,为长路径的源码目录创建短名称符号链接:

mklink /D C:\ceres "R:\Data\ceres4\ceres-solver"

之后在C:\ceres-build\目录下执行CMake配置和编译,编译时实际使用短路径规避MAX_PATH限制。

内容的提问来源于stack exchange,提问作者Hendrik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 00:02:41