Невозможно включить cmath с помощью GCC 5.5 на Solaris 10 - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь запустить следующую тестовую программу на моей машине Solaris 10 sparc, используя gcc 5.5.0

#include <iostream>
#include <cmath>

int main()
{
    std::cout << "exp2(4) = " << std::exp2(4) << '\n'
              << "exp2(0.5) = " << std::exp2(0.5) << '\n'
              << "exp2(-4) = " << std::exp2(-4) << '\n';
    return 0;
}

Ниже приведены сведения об ОС

~$ uname -a
SunOS sovms577 5.10 Generic_147147-26 sun4v sparc SUNW,SPARC-Enterprise-T5220
~$ cat /etc/release 
                   Oracle Solaris 10 1/13 s10s_u11wos_24a SPARC
  Copyright (c) 1983, 2013, Oracle and/or its affiliates. All rights reserved.
                            Assembled 17 January 2013

При компиляции с использованиемследующая команда,

g++ -std=c++11 -Wall test.cpp

Я получаю следующую ошибку,

In file included from /opt/csw/include/c++/5.5.0/cmath:44:0,
                 from test.cpp:2:
/opt/csw/lib/gcc/sparc-sun-solaris2.10/5.5.0/include-fixed/math.h:52:12: error: ‘std::float_t’ has not been declared
 using std::float_t;
            ^
/opt/csw/lib/gcc/sparc-sun-solaris2.10/5.5.0/include-fixed/math.h:53:12: error: ‘std::double_t’ has not been declared
 using std::double_t;
            ^
/opt/csw/lib/gcc/sparc-sun-solaris2.10/5.5.0/include-fixed/math.h:55:12: error: ‘std::fpclassify’ has not been declared
 using std::fpclassify;
            ^
/opt/csw/lib/gcc/sparc-sun-solaris2.10/5.5.0/include-fixed/math.h:56:12: error: ‘std::isfinite’ has not been declared
 using std::isfinite;

Я установил GCC 5.5, следуя инструкциям здесь .

1 Ответ

0 голосов
/ 17 апреля 2019

Я нашел ту же ошибку.В шапке / opt / csw / lib / gcc / sparc-sun-solaris2.10 / 5.5.0 / include-fixed / math.h я заменил строку:

#if __cplusplus >= 201103L
using std::float_t;

с

#if 0 && __cplusplus >= 201103L
using std::float_t;

Обновление от 24 апреля 2019 - @ Эндрю Хенле хочет, чтобы вы знали

If you are attempting to compile C++11 on an unpatched, unupdated 
installation of Solaris 10, and are presenting this as a "fix", 
you do not understand what you are doing. 

@ Эндрю Хенле говорит, что есть патч «соляриса», которыйисправляет csw / include / c ++ / ... / cmath и csw / lib / gcc /..../ math.h, но как этот патч влияет на установку заголовков csw, неизвестно и не указано.

Обновление 26 апреля 2019

Я собрал новые binutils и gcc-5.5.0, используя установку csw gcc, используя следующие пакеты:

binutils-2.27.tar.bz2
cloog-0.18.1.tar.gz
gcc-5.5.0.tar.gz
gmp-5.1.2.tar.xz
mpc-1.0.1.tar.gz
mpfr-3.1.2.tar.xz

Сначала соберите binutils,

../configure --prefix=$TARGET_PATH/sx64
make
make install

Я использовал следующую конфигурацию для gcc:

../configure --prefix=$TARGET_PATH/sx64 --enable-languages=c,c++ --enable-threads=posix --enable-version-specific-runtime-libs --disable-libsanitizer --with-as=$TARGET_PATH/sx64/bin/as --with-ld=$TARGET_PATH/sx64/bin/ld --with-gnu-ld --with-gnu-as
make bootstrap
make install

Вы должны использовать --with-as и --with-ld, чтобы заставить gcc использовать встроенную версию binutilsвместо неработающих версий системы.

При использовании этого компилятора у меня не было проблем с компиляцией корректного кода c ++ - 11.

...