迁移通知 本站内容正在逐步向 [[https://www.weiran.ink]] 迁移,更新内容请到新站查找。 --- # Visual Studio 找不到长路径中的include文件 近日为了憋论文,需要使用[[https://github.com/alecjacobson/gptoolbox|gptoolbox]]来做图形计算。进一步,需要把其中的一个充满`mex`的文件夹编译一下,而这些`mex`文件依赖于`boost`、[[https://libigl.github.io/|libigl]]和`CGAL`,本来应该是地狱级依赖,幸好作者做好了一套自带下载的`cmake`,但仍然有一个暗坑。 > 在国内搞这些东西,尤其是这种自带下载的`cmake`,最好还是想办法稳定连接`github`,耗费的总时间绝对小过自己吭哧吭哧手动下载和改选项。 一开始貌似一切顺利,Configure(需要关掉`WITH_ELTOPO`选项,否则会要求`BLAS`,貌似不那么容易配,尤其Windows下)-Generate-OpenProject,编译半天……然后报错了…… {{:coding:tools:vs_path_too_long.png|就是这里的代码}} 具体的错误不重要,总之就是`26`行的`CGAL/Surface_mesh_simplification/Detail/Common.h`完全OK,第`27`的`CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Detail/Lindstrom_Turk_core.h`就傻了。 在确认了文件确实存在,并且`CMake`生成的项目确实包括了这个目录树之后,开始注意到这个项目的路径特别的**长**,层次特别地**深**。开始怀疑是路径长度超过了传说中的Windows路径的260字限制,当年去除这个限制是某些系统优化配置软件的功能之一,但是当年从没感受过具体的左右。 检查了一下,项目的额外包含目录是190字,然后上面`26`行是50字左右,`27`行则是75字,似乎正好超出一点。 去除这个260字限制的方法,在[[https://knowledge.autodesk.com/zh-hans/support/autocad/learn-explore/caas/sfdcarticles/sfdcarticles/CHS/The-Windows-10-default-path-length-limitation-MAX-PATH-is-256-characters.html|微软文档]]里面写的方法似乎简单,但具体生效范围如何则语焉不详。首先尝试组策略方法修改,也确实发现改完组策略,注册表那里也自动修改了,但重启后仍然编译报错。 搞的人都怀疑究竟是这个原因,还是另有原因了。但其他没有找到可能的原因,只好还是跟着这个思路做到底试试。于是把整个项目挪动到了磁盘的根目录,再重新走一次流程,重新下载所有依赖项。这次编译什么错都没有报。然后找到所有的`mexw64`文件,拷贝到刚才那个路径太长的`mex`文件夹下,注意还必须把`CGAL`依赖的`libgmp-10.dll`和`libmpfr-4.dll`文件也放进去,运行一切正常。