Я хотел бы задать вопрос о кросс-компиляторе GCC для архитектуры ARM и о десятичных числах с плавающей запятой на основе стандарта ISO / IEC TR 24732, который реализован в <decimal/decimal>
библиотека.
Я скомпилировал кросс-компилятор GCC для ARM, используя crosstool-ng с включенной поддержкой десятичного числа с плавающей точкой, используя флаг --enable-decimal-float=yes
, Все прошло хорошо.
Но когда я пытаюсь скомпилировать тестовое приложение для моей цели (arm1176jzf-s), то я получаю ошибки, такие как:
unable to emulate 'SD'
unable to emulate 'DD'
unable to emulate 'TD'
Вот пример вывода из компилятора:
/home/pajano/x-tools/arm-linaro-linux-gnueabi/arm-linaro-linux-gnueabi/include/c++/4.9.4/decimal/decimal:230:56: error: unable to emulate 'SD'
typedef float __decfloat32 __attribute__((mode(SD)));
^
/home/pajano/x-tools/arm-linaro-linux-gnueabi/arm-linaro-linux-gnueabi/include/c++/4.9.4/decimal/decimal:251:5: error: 'std::decimal::decimal32::decimal32(std::decimal::decimal32::__decfloat32)' cannot be overloaded
decimal32(__decfloat32 __z) : __val(__z) {}
^
/home/pajano/x-tools/arm-linaro-linux-gnueabi/arm-linaro-linux-gnueabi/include/c++/4.9.4/decimal/decimal:238:14: error: with 'std::decimal::decimal32::decimal32(float)'
explicit decimal32(float __r) : __val(__r) {}
^
/home/pajano/x-tools/arm-linaro-linux-gnueabi/arm-linaro-linux-gnueabi/include/c++/4.9.4/decimal/decimal:316:56: error: unable to emulate 'DD'
typedef float __decfloat64 __attribute__((mode(DD)));
^
/home/pajano/x-tools/arm-linaro-linux-gnueabi/arm-linaro-linux-gnueabi/include/c++/4.9.4/decimal/decimal:337:5: error: 'std::decimal::decimal64::decimal64(std::decimal::decimal64::__decfloat64)' cannot be overloaded
decimal64(__decfloat64 __z) : __val(__z) {}
^
/home/pajano/x-tools/arm-linaro-linux-gnueabi/arm-linaro-linux-gnueabi/include/c++/4.9.4/decimal/decimal:324:14: error: with 'std::decimal::decimal64::decimal64(float)'
explicit decimal64(float __r) : __val(__r) {}
^
/home/pajano/x-tools/arm-linaro-linux-gnueabi/arm-linaro-linux-gnueabi/include/c++/4.9.4/decimal/decimal:402:57: error: unable to emulate 'TD'
typedef float __decfloat128 __attribute__((mode(TD)));
^
...
Это простое тестовое приложение, которое я использую для теста. На х86 арка. это приложение компилируется без проблем:
#include <stdio>
#include <iostream>
#include <decimal/decimal>
using namespace std;
int main(int argc, char *argv[])
{
decimal::decimal32 total;
decimal::decimal32 nom = decimal::decimal32(0.1);
int quantity = 10;
total = decimal::decimal32(nom*quantity);
return 0;
}
Так что если здесь есть кто-нибудь, кто может помочь избавиться от этих ошибок, я буду рад любой помощи.
Задача ещё не решена.
Других решений пока нет …