在带有sse/avx的库旁边使用Ceres时出错



我有一个模板库,其中一些函数专门用于float和double类型。此专门化使用sse/avx,因此,此库具有-march=native -mavx2编译器标志。当我尝试使用这个库的一些函数(不是专门的(时,我从Ceres得到了以下运行时错误:

test_ceres: /usr/include/eigen3/Eigen/src/Core/DenseStorage.h:128: Eigen::internal::plain_array<double, 4, 0, 32>::plain_array() [T = double, Size = 4, MatrixOrArrayOptions = 0, Alignment = 32]: Assertion `(internal::UIntPtr(array) & (31)) == 0 && "this assertion is explained here: " "http://eigen.tuxfamily.org/dox-devel/group__TopicUnalignedArrayAssert.html" " **** READ THIS WEB PAGE !!! ****"' failed.

我已经能够用一个简单得多的代码重现错误:在这里。从本质上讲,这个例子在-mavx2 -march=native标志被删除时有效,而在它们存在时不起作用(产生上一个错误((来自CmakeLists.txt的注释和取消注释(。在这个例子中,不存在使用avx/sse的函数,但请记住,我的库中有它们,所以删除标志-mavx2 -march=native不是一个选项。你知道该怎么解决这个问题吗?当我编译Ceres时,我添加了标志-DCMAKE_CXX_FLAGS="-march=native",正如文档中所指出的。

阅读错误消息中提供的网页没有提供任何解决方案。

关于我的系统的一些有用信息:

  • 编译器:clang++
    • clang 6.0.0-1ubuntu2版本(tags/RELEASE_600/final(
    • 目标:x86_64-pc-linux-gnu
    • 螺纹型号:posix
  • Ceres版本:2.0(我实际上有git repo,几分钟前我已经更新了:(
  • CPU:英特尔(R(酷睿(TM(i7-4770 CPU@3.40GHz

考虑在特征邮件列表中询问这个问题。这不是谷神星的求解问题。

最新更新