Cmake构建时错误Assertion failed: hunk, file ../patch-2.5.9-src/patch.c, line 354,最简单解决办法

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

最近有项目用到了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平台上构建编译,就会无法识别或者报错。

不同系统所定义的换行格式

评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值