在boost头文件中编译错误。在Centos 7上失败,在Ubuntu 16.04上编译

时间:2018-02-21 02:04:41

标签: c++ ubuntu boost centos7

我遇到了一个奇怪的编译问题。任何帮助解决它将不胜感激。我正在将我的应用程序与boost库相关联。我需要在Centos和Ubuntu上编译我的应用程序。在Ubuntu上一切正常,同样的代码无法在Centos 7上编译。错误的位置在提升。不确定问题是否实际上是在提升中,或者是否有其他因素导致错误显示在提升中。当我搜索错误时,我遇到了这个link。但是,这个问题是针对较旧版本的boost。我在下面列出了错误输出:

        /usr/local/include/boost/chrono/duration.hpp: In function 'constexpr typename boost::enable_if<boost::mpl::and_<boost::is_convertible<Rep1, typename boost::common_type<Rep1, Rep2>::type>, boost::is_convertible<Rep2, typename boost::common_type<Rep1, Rep2>::type> >, boost::chrono::duration<typename boost::common_type<Rep1, Rep2>::type, Period> >::type boost::chrono::operator*(const boost::chrono::duration<Rep, Period>&, const Rep2&)':
In file included from /usr/local/include/boost/chrono/time_point.hpp:33:0,
                 from /usr/local/include/boost/thread/lock_types.hpp:22,
                 from /usr/local/include/boost/thread/lock_algorithms.hpp:11,
                 from /usr/local/include/boost/thread/locks.hpp:10,
    ...
    /usr/local/include/boost/chrono/duration.hpp:575:34: error: type/value mismatch at argument 1 in template parameter list for 'template<class Rep, class Period> class boost::chrono::duration'
           typedef duration<CR, Period> CD;
                                      ^
    /usr/local/include/boost/chrono/duration.hpp:575:34: error:   expected a type, got '13u'
    /usr/local/include/boost/chrono/duration.hpp:575:38: error: invalid type in declaration before ';' token
           typedef duration<CR, Period> CD;

来自/usr/local/include/boost/chrono/duration.hpp的相应代码:

    // Duration *

template <class Rep1, class Period, class Rep2>
inline BOOST_CONSTEXPR
typename boost::enable_if <
    mpl::and_ <
    boost::is_convertible<Rep1, typename common_type<Rep1, Rep2>::type>,
    boost::is_convertible<Rep2, typename common_type<Rep1, Rep2>::type>
    >,
    duration<typename common_type<Rep1, Rep2>::type, Period>
>::type
operator*(const duration<Rep1, Period>& d, const Rep2& s)
{
  typedef typename common_type<Rep1, Rep2>::type CR;
  typedef duration<CR, Period> CD;
  return CD(CD(d).count()*static_cast<CR>(s));
}

我在Centos7上遇到此错误。在Ubuntu上不会发生。

Centos版本:

Boost:1.58.0,OS:Centos 7,C ++:g ++ 4.8.5

Ubuntu版本:

Boost:1.58.0,OS:Ubuntu 16.04,C ++:g ++ 5.4.0

不确定C ++编译器的区别是否存在问题。 Centos7上的c ++编译器的默认版本是4.8.5。顺便说一下,CentOS7上的默认升级版本是1.53.2。我编译并安装了boost 1.58.0版本以最小化变量。任何帮助是极大的赞赏。感谢。

1 个答案:

答案 0 :(得分:0)

根据错误信息,我的猜测(以及所有这一切,一个猜测)就是你所拥有的某个地方:

#define CR 13u

导致编译错误。