尝试在 IAR 上编译 eigen 示例

问题描述 投票:0回答:1

我的任务是将 Eigen 引入一个使用 IAR 构建的嵌入式项目,该项目将在 STM32 MCU 上运行。

由于 Eigen 版本 3.4 中的 cmake 文件中的各种编译器检查 - 这些检查似乎不适用于 IAR 工具链 - 我被迫从 gitlab 克隆 master,其中这些检查已被删除。
我的克隆的 SHA 是 ff174f79264d3f8dc0115dea7a288f98208b694f。 因此,以下问题很可能是由于使用开发版本造成的。

当我尝试构建这个示例时,出现构建错误。

      internal::stable_norm_kernel(SegmentWrapper(copy.segment(bi, numext::mini(blockSize, n - bi))), ssq, scale,
                                   ^
"E:\Projects\xxx\third_party\eigen\Eigen\src\Core\StableNorm.h",77  Error[Ta121]:
          Auto variable "<unnamed>" cannot have a stricter alignment than the
          stack

我在本征码的其他部分也遇到了相同的错误。一个这样的反复出现的例子是

    Matrix<Scalar, SmallPanelWidth, SmallPanelWidth, LhsStorageOrder> triangularBuffer(a);
                                                                      ^
"E:\Projects\xxx\third_party\eigen\Eigen\src\Core\products\TriangularMatrixMatrix.h",122  Error[Ta121]:
          Auto variable "triangularBuffer" cannot have a stricter alignment
          than the stack

我不知道这意味着什么,但我怀疑这可能是我的构建配置错误。 有人可以推动我朝正确的方向前进或建议尝试一些事情吗?

eigen iar
1个回答
0
投票

使用预处理器标志

EIGEN_MAX_ALIGN_BYTES
,您可以控制可以对齐的对象数量。如果使用
-DEIGEN_MAX_ALIGN_BYTES=0
进行编译,对齐将被完全禁用。 对于受支持的编译器,应自动设置此标志,但您的工具链似乎不受支持。

您可以在

Eigen 的预处理器指令列表
中搜索包含 ALIGN 的任何标志,以更好地控制应对齐的内容(动态对齐可能确实有效,但无论如何它可能对您的平台没有好处)。

© www.soinside.com 2019 - 2024. All rights reserved.