Gismo库杂谈——与Eigen库的冲突(三)

万万没有想到这个系列会写到第三篇,关于前两篇还请参见:

Gismo库杂谈——与Eigen库的冲突

Gismo库杂谈——与Eigen库的冲突(续)

自从上次对相关冲突解决以后,其实已经稳定在Windows下使用很久了,但是最近将代码迁移到MacOS系统下进行编译测试,结果不出所料再次出现类似的问题,发现报错同样是提示有几种类型在gsEigen命名空间下未定义,这个问题出现的原因还是Eigen下的同名文件中的保护宏使得在gsEigen中的相同定义被屏蔽,在gsUndefEigenGuards.h中添加以下几行即可:

#undef SPARSE_COLETREE_H
#undef SPARSE_COLETREE_H
#undef EIGEN_SPARSELU_MEMORY

同时,在修复了这个问题后还会有第二个报错:标识符DstXprType未定义。

这个是由于文件gismo/gsEigen/src/Core/AssignEvaluator.h第332行对DstXprType的定义被宏EIGEN_NO_DEBUG屏蔽,同时这个宏在其他文件中还受另外一个宏NDEBUG的控制,取消这两个宏的定义即可:

#undef NDEBUG
#undef EIGEN_NO_DEBUG

至此,也算是基本解决了两个库在Windows、MacOS系统下的绝大多数冲突问题(如还有类似冲突,定位冲突发生的位置进行相应调整即可),目前还未在Linux系统下进行测试,如还有相关问题后面也会再提。

方便起见,现已将通过取消Eigen保护宏解决冲突所需的所有(至少是目前)写入gsUndefEigenGuards.h中,可自行取用。(gsUndefEigenGuards.h