可以将线性代数的C++模板库艾根移植到ARM的IAR工作台上吗?我已经尝试过这样做了,但是下面是编译错误。
Error[Pe337]: linkage specification is incompatible with previous "__nounwind __iar_builtin_get_CONTROL" (declared at line 58 of "C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.3\arm\inc\c\iccarm_builtin.h") C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.3\arm\CMSIS\Core\Include\cmsis_gcc.h 151
这是当我使用预处理程序时所得到的全部错误。
__GNUC__
__arm__如果我不使用这些预处理程序,我会从一个#错误的预处理程序中得到一个错误,这个错误来自本征文件Macros.h。
“错误请告诉我,对于您的编译器来说,attribute((aligned(n)))的等效值是什么?”
#if (defined __CUDACC__)
#define EIGEN_ALIGN_TO_BOUNDARY(n) __align__(n)
#elif EIGEN_COMP_GNUC || EIGEN_COMP_PGI || EIGEN_COMP_IBM || EIGEN_COMP_ARM
#define EIGEN_ALIGN_TO_BOUNDARY(n) __attribute__((aligned(n)))
#elif EIGEN_COMP_MSVC
#define EIGEN_ALIGN_TO_BOUNDARY(n) __declspec(align(n))
#elif EIGEN_COMP_SUNCC
// FIXME not sure about this one:
#define EIGEN_ALIGN_TO_BOUNDARY(n) __attribute__((aligned(n)))
#else
//#define EIGEN_ALIGN_TO_BOUNDARY(n) __declspec(align(n))
#error Please tell me what is the equivalent of __attribute__((aligned(n))) for your compiler
#endif我让它工作的视觉c++,但不是IAR。所有包括被添加。
这些错误根据我试图配置特征的预处理程序而改变。有可能在IAR中使用艾根吗?
发布于 2021-01-20 05:53:16
为了添加到@chtz的答案,下面是如何让EIGEN_ALIGN_TO_BOUNDARY宏以与本征库相一致的方式使用IAR的方法:
1:将其添加到Macros.h顶部以标识IAR编译器
/// \internal EIGEN_COMP_ICCARM set to 1 if the compiler is IAR eWARM
#if defined(__ICCARM__)
#define EIGEN_COMP_ICCARM 1
#else
#define EIGEN_COMP_ICCARM 0
#endif2:将此情况添加到宏中定义EIGEN_ALIGN_TO_BOUNDARY(n)的地方
#elif EIGEN_COMP_ICCARM
#define IAR_STRINGIFY(a) #a
#define IAR_ALIGN_STR(n) IAR_STRINGIFY(data_alignment=n)
#define EIGEN_ALIGN_TO_BOUNDARY(n) _Pragma(IAR_ALIGN_STR(n))EIGEN_ALIGN_TO_BOUNDARY(n)现在应该正确地扩展为_Pragma("data_alignment=n")
发布于 2020-06-18 17:08:03
我现在已经开始建造和运行它了。谢谢@chtz提供的EIGEN_DONT_ALIGN宏建议。我就是这么做的。然而,我不知道这对图书馆本身有什么影响,就像这可能会带走什么功能一样。我做了这个:
它们各自的_Pragma("data_alignment=8") T arraySize;
(注意数字)宏中的
这就是艾根3.3.7的工作原理
https://stackoverflow.com/questions/62442225
复制相似问题