首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将本征库安装到IAR /c++编译器

如何将本征库安装到IAR /c++编译器
EN

Stack Overflow用户
提问于 2020-06-18 04:09:27
回答 2查看 413关注 0票数 1

可以将线性代数的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

这是当我使用预处理程序时所得到的全部错误。

代码语言:javascript
运行
复制
__GNUC__
__arm__

如果我不使用这些预处理程序,我会从一个#错误的预处理程序中得到一个错误,这个错误来自本征文件Macros.h。

“错误请告诉我,对于您的编译器来说,attribute((aligned(n)))的等效值是什么?”

代码语言:javascript
运行
复制
#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中使用艾根吗?

EN

回答 2

Stack Overflow用户

发布于 2021-01-20 05:53:16

为了添加到@chtz的答案,下面是如何让EIGEN_ALIGN_TO_BOUNDARY宏以与本征库相一致的方式使用IAR的方法:

1:将其添加到Macros.h顶部以标识IAR编译器

代码语言:javascript
运行
复制
/// \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
#endif

2:将此情况添加到宏中定义EIGEN_ALIGN_TO_BOUNDARY(n)的地方

代码语言:javascript
运行
复制
 #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")

票数 1
EN

Stack Overflow用户

发布于 2020-06-18 17:08:03

我现在已经开始建造和运行它了。谢谢@chtz提供的EIGEN_DONT_ALIGN宏建议。我就是这么做的。然而,我不知道这对图书馆本身有什么影响,就像这可能会带走什么功能一样。我做了这个:

  1. 在文件DenseStorage.h中的第86、105、125、145号行中的
  2. 更改了EIGEN_ALIGN_TO_BOUNDARY(8) T arraySize;

它们各自的_Pragma("data_alignment=8") T arraySize;

(注意数字)宏中的

  • ,第665行,注释掉"#error -请告诉我什么是“

  • ,最后,在预处理器设置中定义宏EIGEN_DONT_ALIGN。

这就是艾根3.3.7的工作原理

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62442225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档