使用 gcc 3.3 mips32 提升 1_49_0 错误

Posted

技术标签:

【中文标题】使用 gcc 3.3 mips32 提升 1_49_0 错误【英文标题】:boost 1_49_0 error with gcc 3.3 mips32 【发布时间】:2014-01-23 16:44:42 【问题描述】:

我在 linux 上工作。 我试图从提升 1_45 传递到提升 1_49。 我的代码与两个 gcc 一起使用 boost 1_45。

我用多个编译器编译我的代码。 使用提升 1_49_0: 使用 gcc 4.4 它可以工作。 (适用于 centos 6.4 x86_64) 使用 gcc 3.3 它无法编译。使用 3.3 编译为 mips32 我在 google 中没有发现这个错误...

代码

 #include <boost/unordered_set.hpp>
 ...
    boost::unordered_set< int >  po_refCombinedElements;
    po_refCombinedElementsp.insert(0);

错误

/rootdir/source/extlibs/boost/boost/unordered/detail/allocator_helpers.hpp: In instantiation of `boost::unordered::detail::default_type_pointer<std::allocator<boost::unordered::detail::ptr_node<int> >, boost::unordered::detail::ptr_node<int>*>':
/rootdir/source/extlibs/boost/boost/unordered/detail/allocator_helpers.hpp:358:   instantiated from `boost::unordered::detail::allocator_traits<std::allocator<boost::unordered::detail::ptr_node<int> > >'
/rootdir/source/extlibs/boost/boost/unordered/detail/unique.hpp:107:   instantiated from `boost::unordered::detail::pick_node<std::allocator<int>, int>'
/rootdir/source/extlibs/boost/boost/unordered/detail/unique.hpp:129:   instantiated from `boost::unordered::detail::set<std::allocator<int>, int, boost::hash<int>, std::equal_to<int> >'
/rootdir/source/extlibs/boost/boost/unordered/unordered_set.hpp:58:   instantiated from `boost::unordered::unordered_set<int, boost::hash<int>, std::equal_to<int>, std::allocator<int> >'
CrHealthAlarmContainer.cpp:43:   instantiated from here
/rootdir/source/extlibs/boost/boost/unordered/detail/allocator_helpers.hpp:271: error:   invalid use of undefined type `struct          boost::unordered::detail::default_type_pointer<std::allocator<boost::unordered::detail::ptr_node<int> >, boost::unordered::detail::ptr_node<int>*>'
/rootdir/source/extlibs/boost/boost/unordered/detail/allocator_helpers.hpp:271: error: declaration of `struct   boost::unordered::detail::default_type_pointer<std::allocator<boost::unordered::detail::ptr_node<int> >, boost::unordered::detail::ptr_node<int>*>'
/rootdir/source/extlibs/boost/boost/unordered/detail/allocator_helpers.hpp:271: error: enumerator value for `value' not integer constant
/rootdir/source/extlibs/boost/boost/unordered/detail/allocator_helpers.hpp: In instantiation of `boost::unordered::detail::default_type_const_pointer<std::allocator<boost::unordered::detail::ptr_node<int> >, const boost::unordered::detail::ptr_node<int>*>':
/rootdir/source/extlibs/boost/boost/unordered/detail/allocator_helpers.hpp:365:   instantiated from `boost::unordered::detail::allocator_traits<std::allocator<boost::unordered::detail::ptr_node<int> > >'
/rootdir/source/extlibs/boost/boost/unordered/detail/unique.hpp:107:   instantiated from `boost::unordered::detail::pick_node<std::allocator<int>, int>'
/rootdir/source/extlibs/boost/boost/unordered/detail/unique.hpp:129:   instantiated from `boost::unordered::detail::set<std::allocator<int>, int, boost::hash<int>, std::equal_to<int> >'
/rootdir/source/extlibs/boost/boost/unordered/unordered_set.hpp:58:   instantiated from `boost::unordered::unordered_set<int, boost::hash<int>, std::equal_to<int>, std::allocator<int> >'
CrHealthAlarmContainer.cpp:43:   instantiated from here
/rootdir/source/extlibs/boost/boost/unordered/detail/allocator_helpers.hpp:272: error: invalid use of undefined type `struct   boost::unordered::detail::default_type_const_pointer<std::allocator<boost::unordered::detail::ptr_node<int> >, const boost::unordered::detail::ptr_node<int>*>'
/rootdir/source/extlibs/boost/boost/unordered/detail/allocator_helpers.hpp:272: error: declaration of `struct   boost::unordered::detail::default_type_const_pointer<std::allocator<boost::unordered::detail::ptr_node<int> >, const boost::unordered::detail::ptr_node<int>*>'
/rootdir/source/extlibs/boost/boost/unordered/detail/allocator_helpers.hpp:272: error: enumerator  value for `value' not integer constant
/rootdir/source/extlibs/boost/boost/unordered/detail/allocator_helpers.hpp: In instantiation of `boost::unordered::detail::default_type_difference_type<std::allocator<boost::unordered::detail::ptr_node<int> >, ptrdiff_t>':
/rootdir/source/extlibs/boost/boost/unordered/detail/allocator_helpers.hpp:375:   instantiated from `boost::unordered::detail::allocator_traits<std::allocator<boost::unordered::detail::ptr_node<int> > >'
/rootdir/source/extlibs/boost/boost/unordered/detail/unique.hpp:107:   instantiated from `boost::unordered::detail::pick_node<std::allocator<int>, int>'
/rootdir/source/extlibs/boost/boost/unordered/detail/unique.hpp:129:   instantiated from `boost::unordered::detail::set<std::allocator<int>, int, boost::hash<int>, std::equal_to<int> >'
/rootdir/source/extlibs/boost/boost/unordered/unordered_set.hpp:58:   instantiated from `boost::unordered::unordered_set<int, boost::hash<int>, std::equal_to<int>, std::allocator<int> >'
CrHealthAlarmContainer.cpp:43:   instantiated from here
/rootdir/source/extlibs/boost/boost/unordered/detail/allocator_helpers.hpp:275: error: invalid use of undefined type `struct  boost::unordered::detail::default_type_difference_type<std::allocator<boost::unordered::detail::ptr_node<int> >, ptrdiff_t>'
/rootdir/source/extlibs/boost/boost/unordered/detail/allocator_helpers.hpp:275: error: declaration of `struct boost::unordered::detail::default_type_difference_type<std::allocator<boost::unordered::detail::ptr_node<int> >, ptrdiff_t>'
/rootdir/source/extlibs/boost/boost/unordered/detail/allocator_helpers.hpp:275: error: enumerator value for `value' not integer constant

【问题讨论】:

你有什么问题? 我的问题是为什么我得到这些错误 因为 GCC 3.3 是在 2003 年发布的? 【参考方案1】:

提升requires GCC 4.5 or higher。我找不到 Boost 1.49 的引用,但这仍然是问题所在。我想他们正在使用您古老的 GCC 3.3(2003 年 5 月!)中存在缺陷的功能

【讨论】:

@davidbobo:所以,在早期的 Boost 版本中,他们不需要这些功能...... @LightnessRacesinOrbit boost 将最低要求列为gcc-3.3,但与所有非主要目标一样,不能保证所有库和功能都可用。 @davidbobo 仅仅因为 Boost.config 支持 GCC-3.3 并不意味着个别功能会。您应该升级 GCC 或获取您需要的功能支持 GCC-3.3 的版本 @LightnessRacesinOrbit 我应该改写我的评论。我在评论的发行说明中链接了我在哪里得到它。但是很明显,他们将 Boost.Config 所需的最低 GCC 版本更新为 3.3……而不是 Boost 整体。总的来说,编译 Boost 的所有功能是正确的,需要 GCC-4.5。根据具体情况,个别功能可能适用于旧版本。

以上是关于使用 gcc 3.3 mips32 提升 1_49_0 错误的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 gcc 3.3+ 中以旧方式使用 __func__ ? (C++)

如何从头开始获得更小的工具链?

在 MIPS32 上构建 HDF5 库

Linux Ubuntu使用make编译失败,提示错误127和GCC权限不够

使用 GCC/MinGW 创建代理 DLL

linux pthreads 上的 gcc 4.7 - 使用 __thread 的重要 thread_local 解决方法(无提升)