Eigen和CImg兼容性问题

时间:2014-03-14 09:28:58

标签: c++ graphics compiler-errors eigen cimg

因此,我尝试使用CImg记录和显示图像,但我也使用名为Eigen的线性代数库。巧合的是,他们每个人似乎都有一个同名的宏,"成功"。我尝试过做#undef,但是没有顺利完成。因此,每当我尝试编译时,我都会收到这样的错误:"成功"在不同的文件中定义了两次。如何在不丢失任何宏的情况下删除此错误?非常感谢帮助!

4 个答案:

答案 0 :(得分:2)

问题出现了,因为CImg包含X11标题X.h,它有一个名为"成功"定义。这个宏与Eigen中的ComputationInfo枚举定义冲突,因为它有一个名为"成功"的枚举值。

作为一种解决方法,您可以取消定义"成功"在包括CImg之后,包括Eigen之前:

#include <CImg/CImg.h>
#ifdef Success
  #undef Success
#endif
#include <eigen3/Eigen/Eigen>

另见关于Eigen的bug追踪器的问题#253:http://eigen.tuxfamily.org/bz/show_bug.cgi?id=253

答案 1 :(得分:1)

Eigen和CImg都没有这样的#define。但是,Eigen确实在Eigen命名空间中有这样的枚举,所以问题更可能来自X11 X.h头文件#define Success。

所以,如果你需要使用X11中的Success,那么在X11之前包含Eigen的标题(或者包含它的任何人)。

如果您需要Eigen的成功,那么请包括Eigen last,以及#undef Success。

答案 2 :(得分:1)

您可能还希望在包含cimg_display之前将0定义为"CImg.h"(或将-Dcimg_display=0标记放入,以显示CImg中X11头文件的包含内容编译时)。 当然,只有在不需要CImg的显示功能时才这样做。

答案 3 :(得分:0)

如果您的代码中不需要其中一个宏,则可以在{2}之间#undef。因此,它实际上取决于您在您的代码中所需的内容。