迁移通知
本站内容正在逐步向 https://www.weiran.ink 迁移,更新内容请到新站查找。
近日为了憋论文,需要使用gptoolbox来做图形计算。进一步,需要把其中的一个充满mex
的文件夹编译一下,而这些mex
文件依赖于boost
、libigl和CGAL
,本来应该是地狱级依赖,幸好作者做好了一套自带下载的cmake
,但仍然有一个暗坑。
在国内搞这些东西,尤其是这种自带下载的`cmake`,最好还是想办法稳定连接`github`,耗费的总时间绝对小过自己吭哧吭哧手动下载和改选项。
一开始貌似一切顺利,Configure(需要关掉WITH_ELTOPO
选项,否则会要求BLAS
,貌似不那么容易配,尤其Windows下)-Generate-OpenProject,编译半天……然后报错了……
具体的错误不重要,总之就是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字限制的方法,在微软文档里面写的方法似乎简单,但具体生效范围如何则语焉不详。首先尝试组策略方法修改,也确实发现改完组策略,注册表那里也自动修改了,但重启后仍然编译报错。
搞的人都怀疑究竟是这个原因,还是另有原因了。但其他没有找到可能的原因,只好还是跟着这个思路做到底试试。于是把整个项目挪动到了磁盘的根目录,再重新走一次流程,重新下载所有依赖项。这次编译什么错都没有报。然后找到所有的mexw64
文件,拷贝到刚才那个路径太长的mex
文件夹下,注意还必须把CGAL
依赖的libgmp-10.dll
和libmpfr-4.dll
文件也放进去,运行一切正常。