Como verificar a versão do meu gcc?

In file included from /usr/include/c++/4.8.2/locale:41:0,
                 from /usr/include/c++/4.8.2/iomanip:43,
                 from [...omitted by myself as it is irrelevant]
/usr/include/c++/4.8.2/bits/locale_facets_nonio.h:59:39: error: ‘locale’ has not been declared
     struct __timepunct_cache : public locale::facet

acima está o primeiro erro no meu registo de compilação.

Eu não tentei compilar a glibc / gcc, e instalei - as via yum.

Uma coisa estranha que encontrei foi:
$ ll /usr/include/c++/
total 4
drwxr-xr-x. 12 root root 4096 Dec 17 14:16 4.8.2
lrwxrwxrwx   1 root root    5 Dec 17 14:16 4.8.5 -> 4.8.2
$

e o yum mostrou apenas uma versão do gcc:

$ yum info gcc-c++
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: centos.uhost.hk
 * epel: mirrors.hustunique.com
 * extras: centos.uhost.hk
 * updates: centos.uhost.hk
Installed Packages
Name        : gcc-c++
Arch        : x86_64
Version     : 4.8.5
Release     : 4.el7
Size        : 16 M
Repo        : installed
From repo   : base
Summary     : C++ support for GCC
URL         : http://gcc.gnu.org
License     : GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2+ and BSD
Description : This package adds C++ support to the GNU Compiler Collection.
            : It includes support for most of the current C++ specification,
            : including templates and exception handling.

alguma ideia de como verificar os cabeçalhos em / usr / include/c++ / 4.8.2 é mesmo do pacote 4.8.5?

Obrigado antecipadamente.

P. S. acho que provavelmente a glibc é irrelevante, mas aqui está a informação:

$ ldd --version
ldd (GNU libc) 2.17
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
Author: Employed Russian, 0000-00-00

1 answers

A ligação simbólica para a pasta 4.8.2 não é motivo de preocupação, é normal que os cabeçalhos libstdc++ no Red Hat Enterprise Linux (e, portanto, CentOS) sejam organizados dessa forma.

gcc --version dir-lhe-á a versão do executável gcc no seu caminho.

rpm -q libstdc++-devel dir-lhe-á a versão do pacote que possui os cabeçalhos de biblioteca padrão C++.

rpm -ql libstdc++-devel irá listar os arquivos instalados por esse pacote, que irá incluir os arquivos sob /usr/include/c++/4.8.2

rpm --verify libstdc++-devel irá verificar se não estragou os cabeçalhos de C++, substituindo-os por outra coisa.

O erro é mais preocupante, o que implica que você estragou alguma coisa. O meu palpite é que está na parte from [...omitted by myself as it is irrelevant], o que pode ser muito relevante. std::locale deve ser declarado em <bits/locale_classes.h> que está incluído antes de <bits/locale_facets_nonio.h>, por isso, se não foi declarado o meu palpite é que você tem algum cabeçalho que define _LOCALE_CLASSES_H e impede que o cabeçalho da biblioteca padrão seja ler. Nãodefinir incluem guardas que começam com sublinhados, são nomes reservados.

 5
Author: Jonathan Wakely, 2017-05-23 11:54:12