1. ホーム
  2. c++

[解決済み] gccのバージョンを確認する方法は?

2022-03-06 21:24:36

質問

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

上記は、私のビルドログの最初のエラーです。

glibc/gccは自分でコンパイルしようとせず、yumでインストールしました。

一つあやしいことがありました。

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

そして、yumはgccのバージョンを1つだけ表示しました。

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

usr/include/c++/4.8.2 のヘッダーが本当に 4.8.5 パッケージのものであるか確認する方法を教えてください。

よろしくお願いします。

P.S. おそらくglibcは関係ないと思いますが、以下はその情報です。

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

解決方法は?

へのシンボリックリンクは 4.8.2 Red Hat Enterprise Linux (つまり CentOS) の libstdc++ ヘッダーはこのように配置されるのが普通です。

gcc --version のバージョンが表示されます。 gcc を実行することができます。

rpm -q libstdc++-devel は、C++標準ライブラリヘッダを所有するパッケージのバージョンを示します。

rpm -ql libstdc++-devel はそのパッケージによってインストールされたファイルの一覧を表示し、その中には /usr/include/c++/4.8.2

rpm --verify libstdc++-devel は、C++ ヘッダを他のものに置き換えて台無しにしていないことを確認します。

このエラーは、あなたが 何か をアップします。私の推測では、その原因は from [...omitted by myself as it is irrelevant] の部分は、実はとても重要かもしれません。 std::locale を宣言する必要があります。 <bits/locale_classes.h> の前に含まれる <bits/locale_facets_nonio.h> ということは、もし宣言されていないのであれば、何らかのヘッダを定義しているのでしょう。 _LOCALE_CLASSES_H で、標準ライブラリのヘッダを読めないようにしています。行う ない はアンダースコアで始まるインクルードガードを定義しています。 予約名 .