迁移通知

本站内容正在逐步向 https://www.weiran.ink 迁移,更新内容请到新站查找。


Visual Studio 找不到长路径中的include文件

近日为了憋论文,需要使用gptoolbox来做图形计算。进一步,需要把其中的一个充满mex的文件夹编译一下,而这些mex文件依赖于boostlibiglCGAL,本来应该是地狱级依赖,幸好作者做好了一套自带下载的cmake,但仍然有一个暗坑。

在国内搞这些东西,尤其是这种自带下载的`cmake`,最好还是想办法稳定连接`github`,耗费的总时间绝对小过自己吭哧吭哧手动下载和改选项。

一开始貌似一切顺利,Configure(需要关掉WITH_ELTOPO选项,否则会要求BLAS,貌似不那么容易配,尤其Windows下)-Generate-OpenProject,编译半天……然后报错了……

就是这里的代码

具体的错误不重要,总之就是26行的CGAL/Surface_mesh_simplification/Detail/Common.h完全OK,第27CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Detail/Lindstrom_Turk_core.h就傻了。

在确认了文件确实存在,并且CMake生成的项目确实包括了这个目录树之后,开始注意到这个项目的路径特别的,层次特别地。开始怀疑是路径长度超过了传说中的Windows路径的260字限制,当年去除这个限制是某些系统优化配置软件的功能之一,但是当年从没感受过具体的左右。

检查了一下,项目的额外包含目录是190字,然后上面26行是50字左右,27行则是75字,似乎正好超出一点。

去除这个260字限制的方法,在微软文档里面写的方法似乎简单,但具体生效范围如何则语焉不详。首先尝试组策略方法修改,也确实发现改完组策略,注册表那里也自动修改了,但重启后仍然编译报错。

搞的人都怀疑究竟是这个原因,还是另有原因了。但其他没有找到可能的原因,只好还是跟着这个思路做到底试试。于是把整个项目挪动到了磁盘的根目录,再重新走一次流程,重新下载所有依赖项。这次编译什么错都没有报。然后找到所有的mexw64文件,拷贝到刚才那个路径太长的mex文件夹下,注意还必须把CGAL依赖的libgmp-10.dlllibmpfr-4.dll文件也放进去,运行一切正常。

  • 最后更改: 2025/05/10 05:59