/usr/include/c++/v1/map:837:5: error: static_assert failed "Allocator::value_type must be same type as value_type"
Otacílio
otacilio.neto at bsd.com.br
Wed Jun 15 11:32:05 UTC 2016
Em 15/06/2016 06:54, Dimitry Andric escreveu:
> On 15 Jun 2016, at 03:40, Otacílio <otacilio.neto at bsd.com.br> wrote:
>> Em 14/06/2016 18:14, Dimitry Andric escreveu:
>>> On 14 Jun 2016, at 06:05, Otacílio <otacilio.neto at bsd.com.br> wrote:
>>>> I'm getting this error when I try compile the ORB-SLAM2 library. Some one can give me a hint about it?
>>>>
>>>>
>>>> /usr/include/c++/v1/map:837:5: error: static_assert failed "Allocator::value_type must be same type as value_type"
>>>> static_assert((is_same<typename allocator_type::value_type, value_type>::value),
>>> Typically, this is because the allocator for std::map must use a const
>>> key, and libc++ now checks for this with a static assertion.
>>>
>>> See for example this fix for www/node:
>>> https://svnweb.freebsd.org/ports/head/www/node/files/patch-deps_v8_src_compiler_instruction.h?view=markup&pathrev=412412
>>>
>>> -Dimitry
>>>
>> I think that this problem is more difficult that the example. Bellow is the error message:
>>
>> In file included from /usr/ports/graphics/orbslam2/work/ORB_SLAM2-132d92f/src/LoopClosing.cc:21:
>> In file included from /usr/ports/graphics/orbslam2/work/ORB_SLAM2-132d92f/include/LoopClosing.h:24:
>> In file included from /usr/ports/graphics/orbslam2/work/ORB_SLAM2-132d92f/include/KeyFrame.h:24:
>> In file included from /usr/ports/graphics/orbslam2/work/ORB_SLAM2-132d92f/include/MapPoint.h:25:
>> In file included from /usr/ports/graphics/orbslam2/work/ORB_SLAM2-132d92f/include/Frame.h:27:
>> In file included from /usr/local/include/DBoW2/BowVector.h:14:
>> /usr/include/c++/v1/map:837:5: error: static_assert failed "Allocator::value_type must be same type as value_type"
>> static_assert((is_same<typename allocator_type::value_type, value_type>::value),
>> ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> /usr/ports/graphics/orbslam2/work/ORB_SLAM2-132d92f/src/LoopClosing.cc:436:21: note: in instantiation of template class 'std::__1::map<ORB_SLAM2::KeyFrame *, g2o::Sim3, std::__1::less<ORB_SLAM2::KeyFrame *>, Eigen::aligned_allocator<std::__1::pair<const ORB_SLAM2::KeyFrame *, g2o::Sim3> > >' requested here
>> KeyFrameAndPose CorrectedSim3, NonCorrectedSim3;
> This patch should hopefully work. I do not have the port itself, so I could not compile-test it.
>
> diff --git a/include/LoopClosing.h b/include/LoopClosing.h
> index b1736fe..5d80d02 100644
> --- a/include/LoopClosing.h
> +++ b/include/LoopClosing.h
> @@ -47,7 +47,7 @@ public:
>
> typedef pair<set<KeyFrame*>,int> ConsistentGroup;
> typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,
> - Eigen::aligned_allocator<std::pair<const KeyFrame*, g2o::Sim3> > > KeyFrameAndPose;
> + Eigen::aligned_allocator<std::pair<KeyFrame const*, g2o::Sim3> > > KeyFrameAndPose;
>
> public:
>
> -Dimitry
>
Dear
I have applied your patch, but the bug stay there :(
In file included from
/usr/ports/graphics/orbslam2/work/ORB_SLAM2-132d92f/src/LoopClosing.cc:21:
In file included from
/usr/ports/graphics/orbslam2/work/ORB_SLAM2-132d92f/include/LoopClosing.h:24:
In file included from
/usr/ports/graphics/orbslam2/work/ORB_SLAM2-132d92f/include/KeyFrame.h:24:
In file included from
/usr/ports/graphics/orbslam2/work/ORB_SLAM2-132d92f/include/MapPoint.h:25:
In file included from
/usr/ports/graphics/orbslam2/work/ORB_SLAM2-132d92f/include/Frame.h:27:
In file included from /usr/local/include/DBoW2/BowVector.h:14:
/usr/include/c++/v1/map:837:5: error: static_assert failed
"Allocator::value_type must be same type as value_type"
static_assert((is_same<typename allocator_type::value_type,
value_type>::value),
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/ports/graphics/orbslam2/work/ORB_SLAM2-132d92f/src/LoopClosing.cc:436:21:
note: in instantiation of template class
'std::__1::map<ORB_SLAM2::KeyFrame *, g2o::Sim3,
std::__1::less<ORB_SLAM2::KeyFrame *>,
Eigen::aligned_allocator<std::__1::pair<const ORB_SLAM2::KeyFrame *,
g2o::Sim3> > >' requested here
KeyFrameAndPose CorrectedSim3, NonCorrectedSim3;
This is the source code of LoopClosing.h after patch:
#ifndef LOOPCLOSING_H
#define LOOPCLOSING_H
#include "KeyFrame.h"
#include "LocalMapping.h"
#include "Map.h"
#include "ORBVocabulary.h"
#include "Tracking.h"
#include "KeyFrameDatabase.h"
#include <thread>
#include <mutex>
#include <g2o/types/sim3/types_seven_dof_expmap.h>
namespace ORB_SLAM2
{
class Tracking;
class LocalMapping;
class KeyFrameDatabase;
class LoopClosing
{
public:
typedef pair<set<KeyFrame*>,int> ConsistentGroup;
typedef map<KeyFrame*,g2o::Sim3,std::less<KeyFrame*>,
Eigen::aligned_allocator<std::pair<KeyFrame const*, g2o::Sim3>
> > KeyFrameAndPose;
More information about the freebsd-hackers
mailing list