微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

包含 iostream 的 g++ 在几乎相同的系统上给出编译错误,为什么?

如何解决包含 iostream 的 g++ 在几乎相同的系统上给出编译错误,为什么?

奇怪的问题,我有两个系统,CentOS Linux 版本 8.3.2011,从软件包的角度来看,它们几乎相同,安装在一个上的所有内容也安装在另一个上,除了少数例外,它们都与 gcc 无关版本。

# gcc --version
gcc (GCC) 8.3.1 20191121 (Red Hat 8.3.1-5)

# ld --version
GNU ld version 2.30-79.el8

# ldd --version
ldd (GNU libc) 2.28

但是,当我尝试编译一个简单的 C++ 程序时:

#include <iostream>

int main(void)
{
        return 0;
}

我收到以下错误 [1]。 任何想法,如何缩小问题的范围? 我尝试重新安装 gcc 和 gcc-c++ 包。

# g++ test_c11_v2.c++
In file included from /usr/include/c++/8/string:52,from /usr/include/c++/8/bits/locale_classes.h:40,from /usr/include/c++/8/bits/ios_base.h:41,from /usr/include/c++/8/ios:42,from /usr/include/c++/8/ostream:38,from /usr/include/c++/8/iostream:39,from test_c11_v2.c++:1:
/usr/include/c++/8/bits/basic_string.h: In static member function ‘static int std::__cxx11::basic_string<_CharT,_Traits,_Alloc>::_S_compare(std::__cxx11::basic_string<_CharT,_Alloc>::size_type,std::__cxx11::basic_string<_CharT,_Alloc>::size_type)’:
/usr/include/c++/8/bits/basic_string.h:394:46: error: ‘__max’ is not a member of ‘__gnu_cxx::__numeric_traits<int>’
  if (__d > __gnu_cxx::__numeric_traits<int>::__max)
                                              ^~~~~
/usr/include/c++/8/bits/basic_string.h:395:45: error: ‘__max’ is not a member of ‘__gnu_cxx::__numeric_traits<int>’
    return __gnu_cxx::__numeric_traits<int>::__max;
                                             ^~~~~
/usr/include/c++/8/bits/basic_string.h:396:51: error: ‘__min’ is not a member of ‘__gnu_cxx::__numeric_traits<int>’
  else if (__d < __gnu_cxx::__numeric_traits<int>::__min)
                                                   ^~~~~
/usr/include/c++/8/bits/basic_string.h:397:45: error: ‘__min’ is not a member of ‘__gnu_cxx::__numeric_traits<int>’
    return __gnu_cxx::__numeric_traits<int>::__min;
                                             ^~~~~
In file included from /usr/include/c++/8/bits/basic_string.h:6400,from /usr/include/c++/8/string:52,from test_c11_v2.c++:1:
/usr/include/c++/8/ext/string_conversions.h: In static member function ‘static bool __gnu_cxx::__stoa(_TRet (*)(const _CharT*,_CharT**,_Base ...),const char*,const _CharT*,std::size_t*,_Base ...)::_Range_chk::_S_chk(_TRet,std::true_type)’:
/usr/include/c++/8/ext/string_conversions.h:75:50: error: ‘__min’ is not a member of ‘__gnu_cxx::__numeric_traits<int>’
      return __val < _TRet(__numeric_traits<int>::__min)
                                                  ^~~~~
/usr/include/c++/8/ext/string_conversions.h:76:48: error: ‘__max’ is not a member of ‘__gnu_cxx::__numeric_traits<int>’
        || __val > _TRet(__numeric_traits<int>::__max);
                                                ^~~~~
In file included from /usr/include/c++/8/istream:991,from /usr/include/c++/8/iostream:40,from test_c11_v2.c++:1:
/usr/include/c++/8/bits/istream.tcc: In member function ‘std::basic_istream<_CharT,_Traits>& std::basic_istream<_CharT,_Traits>::operator>>(int&)’:
/usr/include/c++/8/bits/istream.tcc:183:52: error: ‘__min’ is not a member of ‘__gnu_cxx::__numeric_traits<int>’
        if (__l < __gnu_cxx::__numeric_traits<int>::__min)
                                                    ^~~~~
/usr/include/c++/8/bits/istream.tcc:186:45: error: ‘__min’ is not a member of ‘__gnu_cxx::__numeric_traits<int>’
     __n = __gnu_cxx::__numeric_traits<int>::__min;
                                             ^~~~~
/usr/include/c++/8/bits/istream.tcc:188:57: error: ‘__max’ is not a member of ‘__gnu_cxx::__numeric_traits<int>’
        else if (__l > __gnu_cxx::__numeric_traits<int>::__max)
                                                         ^~~~~
/usr/include/c++/8/bits/istream.tcc:191:45: error: ‘__max’ is not a member of ‘__gnu_cxx::__numeric_traits<int>’
     __n = __gnu_cxx::__numeric_traits<int>::__max;
                                             ^~~~~

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。