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.
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.