最近有项目用到了eigen,eigen是一个C++模板库,主要特色就是支持线性代数的计算。
但在安装eigen时,使用Cmake构建编译过程中,碰到了一个头疼的问题,每次都会报错
Assertion failed: hunk, file ../patch-2.5.9-src/patch.c, line 354
完整的报错信息如下:

遇到的这个问题,纠结了很长一段时间,原本以为是第三方库patch出了问题,但始终也没找到patch.c文件在哪里。
最后终于找到了问题根源,就是因为文件中的换行字符在Linux和Windows表现不同导致。
由于依赖项的patch、diff文件中,存在行尾换行字符不一致,所以导致了Assertion failed: hunk, file ../patch-2.5.9-src/patch.c, line 354错误的出现。
核心原因
在各个系统中,编辑文件生成的换行符,其实是不一样的:
Unix/Linux 系统中:每行结尾只有 "<换行>",即 "\n";
Windows/Dos 系统中:每行结尾是 "<回车><换行>",即 "\r\n";
Mac 系统中:每行结尾是 "<回车>",即 "\r"。
这个时候,如果我们使用的是跨平台的开源库,就很容易碰到这样的问题,因为保不齐某些构建、编译文件就是在Linux下编写的,而我们如果在Windows平台上构建编译,就会无法识别或者报错。
不同系统所定义的换行格式

在安装C++线性代数库eigen时,使用CMake构建遇到Assertion failed错误,源于文件换行符在不同系统间的差异。解决办法是通过Notepad++等工具转换文件行尾格式为Unix(LF),从而消除构建问题。
最低0.47元/天 解锁文章





