使用gcc 4.8.1编译C ++ 11&#39; <random>的问题

时间:2015-06-05 00:44:34

标签: c++ c++11 gcc random compilation

我试图在linux服务器上利用C ++ 11的库编译一些代码。代码在我的mac上用我的makefile中的这一行编译好:

 CC = clang++ -std=c++11 -stdlib=libc++

但是,当我尝试在Linux服务器上使用gcc版本4.8.1编译相同的代码时,我收到以下错误:

$ /usr/local/share/gcc481/bin/g++ -std=c++11 server.cpp
In file included from /auto/pkg/gcc-4.8.1/share/gcc481/include/c++/4.8.1/random:50:0,
                 from ellipse-graph.h:6,
                 from server.cpp:1:
/auto/pkg/gcc-4.8.1/share/gcc481/include/c++/4.8.1/bits/random.h: In instantiation of 'class std::uniform_int_distribution<double>':
server.cpp:17:59:   required from here
/auto/pkg/gcc-4.8.1/share/gcc481/include/c++/4.8.1/bits/random.h:1668:7: error: static assertion failed: template argument not an integral type
       static_assert(std::is_integral<_IntType>::value,
       ^
In file included from /auto/pkg/gcc-4.8.1/share/gcc481/include/c++/4.8.1/bits/move.h:57:0,
                 from /auto/pkg/gcc-4.8.1/share/gcc481/include/c++/4.8.1/bits/stl_pair.h:59,
                 from /auto/pkg/gcc-4.8.1/share/gcc481/include/c++/4.8.1/bits/stl_algobase.h:64,
                 from /auto/pkg/gcc-4.8.1/share/gcc481/include/c++/4.8.1/vector:60,
                 from interval.h:4,
                 from vertex.h:4,
                 from ellipse-graph.h:4,
                 from server.cpp:1:
/auto/pkg/gcc-4.8.1/share/gcc481/include/c++/4.8.1/type_traits: In instantiation of 'struct std::make_unsigned<double>':
/auto/pkg/gcc-4.8.1/share/gcc481/include/c++/4.8.1/bits/random.tcc:884:57:   required from 'std::uniform_int_distribution<_IntType>::result_type std::uniform_int_distribution<_IntType>::operator()(_UniformRandomNumberGenerator&, const std::uniform_int_distribution<_IntType>::param_type&) [with _UniformRandomNumberGenerator = std::linear_congruential_engine<long unsigned int, 16807ul, 0ul, 2147483647ul>; _IntType = double; std::uniform_int_distribution<_IntType>::result_type = double]'
/auto/pkg/gcc-4.8.1/share/gcc481/include/c++/4.8.1/bits/random.h:1770:51:   required from 'std::uniform_int_distribution<_IntType>::result_type std::uniform_int_distribution<_IntType>::operator()(_UniformRandomNumberGenerator&) [with _UniformRandomNumberGenerator = std::linear_congruential_engine<long unsigned int, 16807ul, 0ul, 2147483647ul>; _IntType = double; std::uniform_int_distribution<_IntType>::result_type = double]'
server.cpp:20:40:   required from here
/auto/pkg/gcc-4.8.1/share/gcc481/include/c++/4.8.1/type_traits:1531:62: error: invalid use of incomplete type 'class std::__make_unsigned_selector<double, false, false>'
     { typedef typename __make_unsigned_selector<_Tp>::__type type; };
                                                              ^
/auto/pkg/gcc-4.8.1/share/gcc481/include/c++/4.8.1/type_traits:1495:11: error: declaration of 'class std::__make_unsigned_selector<double, false, false>'
     class __make_unsigned_selector;
           ^

看来问题是标题。当我在这里看https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.200x时,在&#34; 26.5&#34;,看来gcc 4.8.1不支持随机数生成,除非我不正确地解释这一点。我该怎么编译这个文件?

0 个答案:

没有答案