Как установить библиотеку Eigen в компилятор IAR c / c ++ - PullRequest
0 голосов
/ 18 июня 2020

можно ли перенести Eigen, библиотеку шаблонов C ++ для линейной алгебры, в рабочую среду IAR для ARM. Я пытался сделать это, но получаю следующие ошибки компиляции

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__

если Я не использую эти препроцессоры. Я получаю сообщение об ошибке из препроцессора #error из файла Macros.h

"error. Скажите, пожалуйста, что эквивалентно атрибуту ((выровнено (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

У меня он работает для Visual C ++, но не для IAR. Все включения добавлены.

Эти ошибки меняются в зависимости от препроцессоров, которые я использую для настройки Eigen. Можно ли использовать Eigen с IAR?

1 Ответ

0 голосов
/ 18 июня 2020

Теперь я получил его для сборки и запуска. Спасибо @chtz за предложение макроса EIGEN_DONT_ALIGN. Вот как я это сделал. Однако я не уверен, какие последствия это имеет для самой библиотеки, а также какие функции это может отнять. Я сделал это:

  1. включил каталог, в который вы установили Eigen в качестве дополнительных компонентов.
  2. в строках 86, 105, 125, 145 в файле DenseStorage.h измените строки EIGEN_ALIGN_TO_BOUNDARY (8) T array [Size];
    к их соответствующему _Pragma ("data_alignment = 8") T array [Size];
    (обратите внимание на число)
  3. в Macros.h, строка 665, закомментируйте "#error Пожалуйста, скажите мне, что такое"
  4. наконец, определите макрос EIGEN_DONT_ALIGN в настройках препроцессора.

Это то, что сработало для Eigen 3.3. 7

...