高版本的gcc向下兼容,支持低版本的C++标准。
查看g++版本:
g++ --version
在ubuntu20.04上编译时,会出现下面的error,程序都没什么问题,会出现一大堆报程序错误的提示,这里我总结了一个小技巧:一般会出现这种错误,首先排查CmakeLists文件里的c++版本和自己电脑对不对应。
Ubuntu20.04安装的一般是c++14。
In file included from /usr/local/include/ceres/internal/parameter_dims.h:37:0,
from /usr/local/include/ceres/internal/autodiff.h:151,
from /usr/local/include/ceres/autodiff_cost_function.h:130,
from /usr/local/include/ceres/ceres.h:37,
from /home/liqiang/Desktop/slambook2/ch9/bundle_adjustment_ceres.cpp:2:
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:64:21: error: ‘integer_sequence’ is not a member of ‘std’
struct SumImpl<std::integer_sequence<T, N, Ns...>> {
^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:64:21: error: ‘integer_sequence’ is not a member of ‘std’
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:64:46: error: wrong number of template arguments (3, should be 1)
struct SumImpl<std::integer_sequence<T, N, Ns...>> {
^~~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:60:8: note: provided for ‘template<class Seq> struct ceres::internal::SumImpl’
struct SumImpl;
^~~~~~~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:64:49: error: expected unqualified-id before ‘>’ token
struct SumImpl<std::integer_sequence<T, N, Ns...>> {
^~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:71:21: error: ‘integer_sequence’ is not a member of ‘std’
struct SumImpl<std::integer_sequence<T, N1, N2, Ns...>> {
^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:71:21: error: ‘integer_sequence’ is not a member of ‘std’
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:71:51: error: wrong number of template arguments (4, should be 1)
struct SumImpl<std::integer_sequence<T, N1, N2, Ns...>> {
^~~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:60:8: note: provided for ‘template<class Seq> struct ceres::internal::SumImpl’
struct SumImpl;
^~~~~~~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:71:54: error: expected unqualified-id before ‘>’ token
struct SumImpl<std::integer_sequence<T, N1, N2, Ns...>> {
^~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:78:21: error: ‘integer_sequence’ is not a member of ‘std’
struct SumImpl<std::integer_sequence<T, N1, N2, N3, N4, Ns...>> {
^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:78:21: error: ‘integer_sequence’ is not a member of ‘std’
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:78:59: error: wrong number of template arguments (6, should be 1)
struct SumImpl<std::integer_sequence<T, N1, N2, N3, N4, Ns...>> {
^~~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:60:8: note: provided for ‘template<class Seq> struct ceres::internal::SumImpl’
struct SumImpl;
^~~~~~~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:78:62: error: expected unqualified-id before ‘>’ token
struct SumImpl<std::integer_sequence<T, N1, N2, N3, N4, Ns...>> {
^~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:85:21: error: ‘integer_sequence’ is not a member of ‘std’
struct SumImpl<std::integer_sequence<T, N>> {
^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:85:21: error: ‘integer_sequence’ is not a member of ‘std’
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:85:41: error: wrong number of template arguments (2, should be 1)
struct SumImpl<std::integer_sequence<T, N>> {
^
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:60:8: note: provided for ‘template<class Seq> struct ceres::internal::SumImpl’
struct SumImpl;
^~~~~~~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:85:42: error: expected unqualified-id before ‘>’ token
struct SumImpl<std::integer_sequence<T, N>> {
^~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:91:21: error: ‘integer_sequence’ is not a member of ‘std’
struct SumImpl<std::integer_sequence<T>> {
^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:91:21: error: ‘integer_sequence’ is not a member of ‘std’
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:91:38: error: template argument 1 is invalid
struct SumImpl<std::integer_sequence<T>> {
^
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:91:39: error: expected unqualified-id before ‘>’ token
struct SumImpl<std::integer_sequence<T>> {
^~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:135:31: error: ‘integer_sequence’ is not a member of ‘std’
std::integer_sequence<T, N, Ns...>,
^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:135:31: error: ‘integer_sequence’ is not a member of ‘std’
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:135:59: error: template argument 3 is invalid
std::integer_sequence<T, N, Ns...>,
^
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:135:59: error: type/value mismatch at argument 4 in template parameter list for ‘template<class T, T Sum, class SeqIn, class SeqOut> struct ceres::internal::ExclusiveScanImpl’
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:135:59: note: expected a type, got ‘N’
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:146:39: error: ‘integer_sequence’ is not a member of ‘std’
struct ExclusiveScanImpl<T, Sum, std::integer_sequence<T>, SeqOut> {
^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:146:39: error: ‘integer_sequence’ is not a member of ‘std’
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:146:57: error: wrong number of template arguments (3, should be 4)
struct ExclusiveScanImpl<T, Sum, std::integer_sequence<T>, SeqOut> {
^
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:130:8: note: provided for ‘template<class T, T Sum, class SeqIn, class SeqOut> struct ceres::internal::ExclusiveScanImpl’
struct ExclusiveScanImpl;
^~~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:160:53: error: ‘integer_sequence’ is not a member of ‘std’
typename ExclusiveScanImpl<T, T(0), Seq, std::integer_sequence<T>>::Type;
^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:160:53: error: ‘integer_sequence’ is not a member of ‘std’
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:160:70: error: template argument 4 is invalid
typename ExclusiveScanImpl<T, T(0), Seq, std::integer_sequence<T>>::Type;
^
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:160:16: error: expected nested-name-specifier
typename ExclusiveScanImpl<T, T(0), Seq, std::integer_sequence<T>>::Type;
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/local/include/ceres/internal/autodiff.h:151:0,
from /usr/local/include/ceres/autodiff_cost_function.h:130,
from /usr/local/include/ceres/ceres.h:37,
from /home/liqiang/Desktop/slambook2/ch9/bundle_adjustment_ceres.cpp:2:
/usr/local/include/ceres/internal/parameter_dims.h:44:55: error: ‘integer_sequence’ is not a member of ‘std’
constexpr bool IsValidParameterDimensionSequence(std::integer_sequence<int>) {
^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/parameter_dims.h:44:72: error: expected primary-expression before ‘int’
constexpr bool IsValidParameterDimensionSequence(std::integer_sequence<int>) {
^~~
/usr/local/include/ceres/internal/parameter_dims.h:50:10: error: ‘template<int N, int ...Ts> constexpr const bool ceres::internal::IsValidParameterDimensionSequence’ redeclared as different kind of symbol
std::integer_sequence<int, N, Ts...>) {
^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/parameter_dims.h:44:16: note: previous declaration ‘constexpr const bool ceres::internal::IsValidParameterDimensionSequence’
constexpr bool IsValidParameterDimensionSequence(std::integer_sequence<int>) {
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/parameter_dims.h:50:10: error: ‘integer_sequence’ is not a member of ‘std’
std::integer_sequence<int, N, Ts...>) {
^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/parameter_dims.h:50:27: error: expected primary-expression before ‘int’
std::integer_sequence<int, N, Ts...>) {
^~~
/usr/local/include/ceres/internal/parameter_dims.h:50:40: error: expected ‘)’ before ‘>’ token
std::integer_sequence<int, N, Ts...>) {
^
/usr/local/include/ceres/internal/parameter_dims.h:69:27: error: ‘integer_sequence’ in namespace ‘std’ does not name a template type
using Parameters = std::integer_sequence<int, Ns...>;
^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/parameter_dims.h:74:41: error: there are no arguments to ‘Parameters’ that depend on a template parameter, so a declaration of ‘Parameters’ must be available [-fpermissive]
IsValidParameterDimensionSequence(Parameters());
^~~~~~~~~~
/usr/local/include/ceres/internal/parameter_dims.h:74:41: note: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated)
/usr/local/include/ceres/internal/parameter_dims.h:85:16: error: ‘integer_sequence’ is not a member of ‘std’
Sum<std::integer_sequence<int, Ns...>>::Value;
^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/parameter_dims.h:85:16: error: ‘integer_sequence’ is not a member of ‘std’
/usr/local/include/ceres/internal/parameter_dims.h:85:43: error: template argument 1 is invalid
Sum<std::integer_sequence<int, Ns...>>::Value;
^~
/usr/local/include/ceres/internal/parameter_dims.h:101:20: error: ‘std::integer_sequence’ has not been declared
T* ptr, std::integer_sequence<int, Indices...>) {
^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/parameter_dims.h:101:36: error: expected ‘,’ or ‘...’ before ‘<’ token
T* ptr, std::integer_sequence<int, Indices...>) {
^
/usr/local/include/ceres/internal/parameter_dims.h: In static member function ‘static std::array<T*, ceres::internal::ParameterDims<IsDynamic, Ns>::kNumParameterBlocks> ceres::internal::ParameterDims<IsDynamic, Ns>::GetUnpackedParameters(T*)’:
/usr/local/include/ceres/internal/parameter_dims.h:94:35: error: ‘Parameters’ was not declared in this scope
using Offsets = ExclusiveScan<Parameters>;
^~~~~~~~~~
/usr/local/include/ceres/internal/parameter_dims.h:94:35: note: suggested alternative: ‘ParameterDims’
using Offsets = ExclusiveScan<Parameters>;
^~~~~~~~~~
ParameterDims
/usr/local/include/ceres/internal/parameter_dims.h:94:45: error: template argument 1 is invalid
using Offsets = ExclusiveScan<Parameters>;
^
/usr/local/include/ceres/internal/parameter_dims.h:95:39: error: there are no arguments to ‘Offsets’ that depend on a template parameter, so a declaration of ‘Offsets’ must be available [-fpermissive]
return GetUnpackedParameters(ptr, Offsets());
^~~~~~~
In file included from /usr/local/include/ceres/internal/autodiff.h:152:0,
from /usr/local/include/ceres/autodiff_cost_function.h:130,
from /usr/local/include/ceres/ceres.h:37,
from /home/liqiang/Desktop/slambook2/ch9/bundle_adjustment_ceres.cpp:2:
/usr/local/include/ceres/internal/variadic_evaluate.h: At global scope:
/usr/local/include/ceres/internal/variadic_evaluate.h:53:39: error: ‘std::integer_sequence’ has not been declared
std::integer_sequence<int, Indices...>) {
^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/variadic_evaluate.h:53:55: error: expected ‘,’ or ‘...’ before ‘<’ token
std::integer_sequence<int, Indices...>) {
^
/usr/local/include/ceres/internal/variadic_evaluate.h:66:39: error: ‘std::integer_sequence’ has not been declared
std::integer_sequence<int>) {
^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/variadic_evaluate.h:66:55: error: expected ‘,’ or ‘...’ before ‘<’ token
std::integer_sequence<int>) {
^
/usr/local/include/ceres/internal/variadic_evaluate.h: In function ‘bool ceres::internal::VariadicEvaluateImpl(const Functor&, const T* const*, T*, const void*)’:
/usr/local/include/ceres/internal/variadic_evaluate.h:77:12: error: ‘make_integer_sequence’ in namespace ‘std’ does not name a template type
std::make_integer_sequence<int, ParameterDims::kNumParameterBlocks>;
^~~~~~~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/variadic_evaluate.h:80:44: error: there are no arguments to ‘ParameterBlockIndices’ that depend on a template parameter, so a declaration of ‘ParameterBlockIndices’ must be available [-fpermissive]
functor, input, output, IsDynamic(), ParameterBlockIndices());
^~~~~~~~~~~~~~~~~~~~~
In file included from /usr/local/include/ceres/autodiff_cost_function.h:130:0,
from /usr/local/include/ceres/ceres.h:37,
from /home/liqiang/Desktop/slambook2/ch9/bundle_adjustment_ceres.cpp:2:
/usr/local/include/ceres/internal/autodiff.h: At global scope:
/usr/local/include/ceres/internal/autodiff.h:217:39: error: ‘integer_sequence’ is not a member of ‘std’
struct Make1stOrderPerturbations<std::integer_sequence<int, N, Ns...>,
^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/autodiff.h:217:39: error: ‘integer_sequence’ is not a member of ‘std’
/usr/local/include/ceres/internal/autodiff.h:217:69: error: template argument 1 is invalid
struct Make1stOrderPerturbations<std::integer_sequence<int, N, Ns...>,
^
/usr/local/include/ceres/internal/autodiff.h:232:39: error: ‘integer_sequence’ is not a member of ‘std’
struct Make1stOrderPerturbations<std::integer_sequence<int>,
^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/autodiff.h:232:39: error: ‘integer_sequence’ is not a member of ‘std’
/usr/local/include/ceres/internal/autodiff.h:232:59: error: template argument 1 is invalid
struct Make1stOrderPerturbations<std::integer_sequence<int>,
^
/usr/local/include/ceres/internal/autodiff.h:282:31: error: ‘integer_sequence’ is not a member of ‘std’
struct Take1stOrderParts<std::integer_sequence<int, N, Ns...>,
^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/autodiff.h:282:31: error: ‘integer_sequence’ is not a member of ‘std’
/usr/local/include/ceres/internal/autodiff.h:282:61: error: template argument 1 is invalid
struct Take1stOrderParts<std::integer_sequence<int, N, Ns...>,
^
/usr/local/include/ceres/internal/autodiff.h:298:31: error: ‘integer_sequence’ is not a member of ‘std’
struct Take1stOrderParts<std::integer_sequence<int>, ParameterIdx, Offset> {
^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/autodiff.h:298:31: error: ‘integer_sequence’ is not a member of ‘std’
/usr/local/include/ceres/internal/autodiff.h:298:51: error: template argument 1 is invalid
struct Take1stOrderParts<std::integer_sequence<int>, ParameterIdx, Offset> {
^
In file included from /usr/local/include/ceres/ceres.h:43:0,
from /home/liqiang/Desktop/slambook2/ch9/bundle_adjustment_ceres.cpp:2:
/usr/local/include/ceres/cost_function_to_functor.h:161:29: error: ‘std::integer_sequence’ has not been declared
std::integer_sequence<int, Indices...>) {
^~~~~~~~~~~~~~~~
/usr/local/include/ceres/cost_function_to_functor.h:161:45: error: expected ‘,’ or ‘...’ before ‘<’ token
std::integer_sequence<int, Indices...>) {
^
/usr/local/include/ceres/cost_function_to_functor.h: In member function ‘bool ceres::CostFunctionToFunctor<kNumResiduals, Ns>::operator()(const T*, Ts* ...) const’:
/usr/local/include/ceres/cost_function_to_functor.h:148:14: error: ‘make_integer_sequence’ in namespace ‘std’ does not name a template type
std::make_integer_sequence<int, ParameterDims::kNumParameterBlocks>;
^~~~~~~~~~~~~~~~~~~~~
/usr/local/include/ceres/cost_function_to_functor.h:150:41: error: there are no arguments to ‘Indices’ that depend on a template parameter, so a declaration of ‘Indices’ must be available [-fpermissive]
GetParameterPointers<T>(params, Indices());
^~~~~~~
In file included from /usr/local/include/ceres/dynamic_numeric_diff_cost_function.h:44:0,
from /usr/local/include/ceres/ceres.h:49,
from /home/liqiang/Desktop/slambook2/ch9/bundle_adjustment_ceres.cpp:2:
/usr/local/include/ceres/internal/numeric_diff.h: At global scope:
/usr/local/include/ceres/internal/numeric_diff.h:445:48: error: ‘integer_sequence’ is not a member of ‘std’
std::integer_sequence<int, N, Ns...>,
^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/numeric_diff.h:445:48: error: ‘integer_sequence’ is not a member of ‘std’
/usr/local/include/ceres/internal/numeric_diff.h:445:78: error: template argument 2 is invalid
std::integer_sequence<int, N, Ns...>,
^
/usr/local/include/ceres/internal/numeric_diff.h:490:48: error: ‘integer_sequence’ is not a member of ‘std’
std::integer_sequence<int>,
^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/numeric_diff.h:490:48: error: ‘integer_sequence’ is not a member of ‘std’
/usr/local/include/ceres/internal/numeric_diff.h:490:68: error: template argument 2 is invalid
std::integer_sequence<int>,
^
In file included from /usr/local/include/g2o/core/base_binary_edge.h:30:0,
from /home/liqiang/Desktop/slambook2/ch9/bundle_adjustment_g2o.cpp:2:
/usr/local/include/g2o/core/base_fixed_sized_edge.h:179:32: error: ‘index_sequence’ is not a member of ‘std’
struct HessianTupleType<std::index_sequence<Ints...>> {
^~~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.h:179:32: error: ‘index_sequence’ is not a member of ‘std’
/usr/local/include/g2o/core/base_fixed_sized_edge.h:179:51: error: expected parameter pack before ‘...’
struct HessianTupleType<std::index_sequence<Ints...>> {
^~~
/usr/local/include/g2o/core/base_fixed_sized_edge.h:179:51: error: template argument 1 is invalid
/usr/local/include/g2o/core/base_fixed_sized_edge.h:179:54: error: expected unqualified-id before ‘>’ token
struct HessianTupleType<std::index_sequence<Ints...>> {
^~
/usr/local/include/g2o/core/base_fixed_sized_edge.h:186:38: error: ‘make_index_sequence’ is not a member of ‘std’
typename HessianTupleType<std::make_index_sequence<_nr_of_vertex_pairs>>::type;
^~~~~~~~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.h:186:38: error: ‘make_index_sequence’ is not a member of ‘std’
/usr/local/include/g2o/core/base_fixed_sized_edge.h:186:58: error: template argument 1 is invalid
typename HessianTupleType<std::make_index_sequence<_nr_of_vertex_pairs>>::type;
^~~~~~~~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.h:186:16: error: expected nested-name-specifier
typename HessianTupleType<std::make_index_sequence<_nr_of_vertex_pairs>>::type;
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.h:188:38: error: ‘make_index_sequence’ is not a member of ‘std’
typename HessianTupleType<std::make_index_sequence<_nr_of_vertex_pairs>>::typeTransposed;
^~~~~~~~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.h:188:38: error: ‘make_index_sequence’ is not a member of ‘std’
/usr/local/include/g2o/core/base_fixed_sized_edge.h:188:58: error: template argument 1 is invalid
typename HessianTupleType<std::make_index_sequence<_nr_of_vertex_pairs>>::typeTransposed;
^~~~~~~~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.h:188:16: error: expected nested-name-specifier
typename HessianTupleType<std::make_index_sequence<_nr_of_vertex_pairs>>::typeTransposed;
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.h:208:32: error: ‘std::index_sequence’ has not been declared
bool allVerticesFixedNs(std::index_sequence<Ints...>) const;
^~~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.h:208:46: error: expected ‘,’ or ‘...’ before ‘<’ token
bool allVerticesFixedNs(std::index_sequence<Ints...>) const;
^
/usr/local/include/g2o/core/base_fixed_sized_edge.h:213:75: error: ‘std::index_sequence’ has not been declared
void linearizeOplus_allocate(JacobianWorkspace& jacobianWorkspace, std::index_sequence<Ints...>);
^~~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.h:213:89: error: expected ‘,’ or ‘...’ before ‘<’ token
void linearizeOplus_allocate(JacobianWorkspace& jacobianWorkspace, std::index_sequence<Ints...>);
^
/usr/local/include/g2o/core/base_fixed_sized_edge.h:221:30: error: ‘std::index_sequence’ has not been declared
void linearizeOplusNs(std::index_sequence<Ints...>);
^~~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.h:221:44: error: expected ‘,’ or ‘...’ before ‘<’ token
void linearizeOplusNs(std::index_sequence<Ints...>);
^
/usr/local/include/g2o/core/base_fixed_sized_edge.h:245:38: error: ‘std::index_sequence’ has not been declared
std::index_sequence<Ints...>);
^~~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.h:245:52: error: expected ‘,’ or ‘...’ before ‘<’ token
std::index_sequence<Ints...>);
^
/usr/local/include/g2o/core/base_fixed_sized_edge.h:250:65: error: ‘std::index_sequence’ has not been declared
void constructOffDiagonalQuadraticFormMs(const AtOType&, std::index_sequence<>);
^~~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.h:250:79: error: expected ‘,’ or ‘...’ before ‘<’ token
void constructOffDiagonalQuadraticFormMs(const AtOType&, std::index_sequence<>);
^
/usr/local/include/g2o/core/base_fixed_sized_edge.h:253:69: error: ‘std::index_sequence’ has not been declared
void constructOffDiagonalQuadraticFormMs(const AtOType& AtO, std::index_sequence<Ints...>);
^~~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.h:253:83: error: expected ‘,’ or ‘...’ before ‘<’ token
void constructOffDiagonalQuadraticFormMs(const AtOType& AtO, std::index_sequence<Ints...>);
^
/usr/local/include/g2o/core/base_fixed_sized_edge.h:270:3: error: ‘HessianTuple’ does not name a type; did you mean ‘HessianTupleType’?
HessianTuple _hessianTuple;
^~~~~~~~~~~~
HessianTupleType
/usr/local/include/g2o/core/base_fixed_sized_edge.h:271:3: error: ‘HessianTupleTransposed’ does not name a type; did you mean ‘HessianTupleType’?
HessianTupleTransposed _hessianTupleTransposed;
^~~~~~~~~~~~~~~~~~~~~~
HessianTupleType
/usr/local/include/g2o/core/base_fixed_sized_edge.h: In constructor ‘g2o::BaseFixedSizedEdge<D, E, VertexTypes>::BaseFixedSizedEdge()’:
/usr/local/include/g2o/core/base_fixed_sized_edge.h:193:9: error: class ‘g2o::BaseFixedSizedEdge<D, E, VertexTypes>’ does not have any field named ‘_hessianTuple’
_hessianTuple(internal::createHessianMaps(_hessianTuple)),
^~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.h:193:51: error: ‘_hessianTuple’ was not declared in this scope
_hessianTuple(internal::createHessianMaps(_hessianTuple)),
^~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.h:193:51: note: suggested alternative: ‘HessianTupleType’
_hessianTuple(internal::createHessianMaps(_hessianTuple)),
^~~~~~~~~~~~~
HessianTupleType
/usr/local/include/g2o/core/base_fixed_sized_edge.h:194:9: error: class ‘g2o::BaseFixedSizedEdge<D, E, VertexTypes>’ does not have any field named ‘_hessianTupleTransposed’
_hessianTupleTransposed(internal::createHessianMaps(_hessianTupleTransposed)),
^~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.h:194:61: error: ‘_hessianTupleTransposed’ was not declared in this scope
_hessianTupleTransposed(internal::createHessianMaps(_hessianTupleTransposed)),
^~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.h:194:61: note: suggested alternative: ‘HessianTupleType’
_hessianTupleTransposed(internal::createHessianMaps(_hessianTupleTransposed)),
^~~~~~~~~~~~~~~~~~~~~~~
HessianTupleType
In file included from /usr/local/include/g2o/core/base_fixed_sized_edge.h:278:0,
from /usr/local/include/g2o/core/base_binary_edge.h:30,
from /home/liqiang/Desktop/slambook2/ch9/bundle_adjustment_g2o.cpp:2:
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp: At global scope:
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:36:10: error: ‘bool g2o::BaseFixedSizedEdge<D, E, VertexTypes>::allVerticesFixedNs’ is not a static data member of ‘class g2o::BaseFixedSizedEdge<D, E, VertexTypes>’
std::index_sequence<Ints...>) const {
^~~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:36:10: error: template definition of non-template ‘bool g2o::BaseFixedSizedEdge<D, E, VertexTypes>::allVerticesFixedNs’
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:36:10: error: ‘index_sequence’ is not a member of ‘std’
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp: In member function ‘virtual bool g2o::BaseFixedSizedEdge<D, E, VertexTypes>::allVerticesFixed() const’:
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:43:34: error: ‘make_index_sequence’ is not a member of ‘std’
return allVerticesFixedNs(std::make_index_sequence<_nr_of_vertices>());
^~~~~~~~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:43:71: error: expected primary-expression before ‘)’ token
return allVerticesFixedNs(std::make_index_sequence<_nr_of_vertices>());
^
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp: In member function ‘virtual void g2o::BaseFixedSizedEdge<D, E, VertexTypes>::constructQuadraticForm()’:
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:55:35: error: ‘make_index_sequence’ is not a member of ‘std’
std::make_index_sequence<_nr_of_vertices>());
^~~~~~~~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:55:72: error: expected primary-expression before ‘)’ token
std::make_index_sequence<_nr_of_vertices>());
^
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:58:35: error: ‘make_index_sequence’ is not a member of ‘std’
std::make_index_sequence<_nr_of_vertices>());
^~~~~~~~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:58:72: error: expected primary-expression before ‘)’ token
std::make_index_sequence<_nr_of_vertices>());
^
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp: At global scope:
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:65:74: error: ‘std::index_sequence’ has not been declared
const InformationType& omega, const ErrorVector& weightedError, std::index_sequence<Ints...>) {
^~~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:65:88: error: expected ‘,’ or ‘...’ before ‘<’ token
const InformationType& omega, const ErrorVector& weightedError, std::index_sequence<Ints...>) {
^
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:75:26: error: ‘std::index_sequence’ has not been declared
const AtOType&, std::index_sequence<>) {}
^~~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:75:40: error: expected ‘,’ or ‘...’ before ‘<’ token
const AtOType&, std::index_sequence<>) {}
^
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:80:30: error: ‘std::index_sequence’ has not been declared
const AtOType& AtO, std::index_sequence<Ints...>) {
^~~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:80:44: error: expected ‘,’ or ‘...’ before ‘<’ token
const AtOType& AtO, std::index_sequence<Ints...>) {
^
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp: In member function ‘void g2o::BaseFixedSizedEdge<D, E, VertexTypes>::constructOffDiagonalQuadraticFormM(const AtOType&)’:
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:98:45: error: ‘_hessianTupleTransposed’ was not declared in this scope
auto& hessianTransposed = std::get<K>(_hessianTupleTransposed);
^~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:98:45: note: suggested alternative: ‘hessianTransposed’
auto& hessianTransposed = std::get<K>(_hessianTupleTransposed);
^~~~~~~~~~~~~~~~~~~~~~~
hessianTransposed
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:101:35: error: ‘_hessianTuple’ was not declared in this scope
auto& hessian = std::get<K>(_hessianTuple);
^~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:101:35: note: suggested alternative: ‘HessianTupleType’
auto& hessian = std::get<K>(_hessianTuple);
^~~~~~~~~~~~~
HessianTupleType
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp: In member function ‘void g2o::BaseFixedSizedEdge<D, E, VertexTypes>::constructQuadraticFormN(const InformationType&, const ErrorVector&)’:
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:122:54: error: ‘make_index_sequence’ is not a member of ‘std’
constructOffDiagonalQuadraticFormMs<N>(AtO, std::make_index_sequence<_nr_of_vertices - N - 1>());
^~~~~~~~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:122:99: error: expected primary-expression before ‘)’ token
constructOffDiagonalQuadraticFormMs<N>(AtO, std::make_index_sequence<_nr_of_vertices - N - 1>());
^
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp: In member function ‘virtual void g2o::BaseFixedSizedEdge<D, E, VertexTypes>::linearizeOplus(g2o::JacobianWorkspace&)’:
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:129:51: error: ‘make_index_sequence’ is not a member of ‘std’
linearizeOplus_allocate(jacobianWorkspace, std::make_index_sequence<_nr_of_vertices>());
^~~~~~~~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:129:88: error: expected primary-expression before ‘)’ token
linearizeOplus_allocate(jacobianWorkspace, std::make_index_sequence<_nr_of_vertices>());
^
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp: At global scope:
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:136:48: error: ‘std::index_sequence’ has not been declared
JacobianWorkspace& jacobianWorkspace, std::index_sequence<Ints...>) {
^~~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:136:62: error: expected ‘,’ or ‘...’ before ‘<’ token
JacobianWorkspace& jacobianWorkspace, std::index_sequence<Ints...>) {
^
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:190:70: error: variable or field ‘linearizeOplusNs’ declared void
void BaseFixedSizedEdge<D, E, VertexTypes...>::linearizeOplusNs(std::index_sequence<Ints...>) {
^~~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:190:70: error: ‘index_sequence’ is not a member of ‘std’
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp: In member function ‘virtual void g2o::BaseFixedSizedEdge<D, E, VertexTypes>::linearizeOplus()’:
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:199:25: error: ‘make_index_sequence’ is not a member of ‘std’
linearizeOplusNs(std::make_index_sequence<_nr_of_vertices>());
^~~~~~~~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:199:62: error: expected primary-expression before ‘)’ token
linearizeOplusNs(std::make_index_sequence<_nr_of_vertices>());
^
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp: In member function ‘virtual void g2o::BaseFixedSizedEdge<D, E, VertexTypes>::mapHessianMemory(number_t*, int, int, bool)’:
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:225:57: error: ‘_hessianTupleTransposed’ was not declared in this scope
tuple_apply_i(MapHessianMemoryK{d, vj_dim, vi_dim}, _hessianTupleTransposed,
^~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:225:57: note: suggested alternative: ‘HessianTupleType’
tuple_apply_i(MapHessianMemoryK{d, vj_dim, vi_dim}, _hessianTupleTransposed,
^~~~~~~~~~~~~~~~~~~~~~~
HessianTupleType
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:228:57: error: ‘_hessianTuple’ was not declared in this scope
tuple_apply_i(MapHessianMemoryK{d, vi_dim, vj_dim}, _hessianTuple,
^~~~~~~~~~~~~
/usr/local/include/g2o/core/base_fixed_sized_edge.hpp:228:57: note: suggested alternative: ‘HessianTupleType’
tuple_apply_i(MapHessianMemoryK{d, vi_dim, vj_dim}, _hessianTuple,
^~~~~~~~~~~~~
HessianTupleType
In file included from /usr/local/include/ceres/internal/autodiff.h:151:0,
from /usr/local/include/ceres/autodiff_cost_function.h:130,
from /usr/local/include/ceres/ceres.h:37,
from /home/liqiang/Desktop/slambook2/ch9/bundle_adjustment_ceres.cpp:2:
/usr/local/include/ceres/internal/parameter_dims.h: In instantiation of ‘constexpr const bool ceres::internal::ParameterDims<false, 9, 3>::kIsValid’:
/usr/local/include/ceres/internal/parameter_dims.h:73:25: required from ‘class ceres::internal::ParameterDims<false, 9, 3>’
/usr/local/include/ceres/sized_cost_function.h:49:47: required from ‘class ceres::SizedCostFunction<2, 9, 3>’
/usr/local/include/ceres/autodiff_cost_function.h:154:7: required from ‘class ceres::AutoDiffCostFunction<SnavelyReprojectionError, 2, 9, 3>’
/home/liqiang/Desktop/slambook2/ch9/SnavelyReprojectionError.h:62:65: required from here
/usr/local/include/ceres/internal/parameter_dims.h:74:51: error: ‘Parameters’ was not declared in this scope
IsValidParameterDimensionSequence(Parameters());
~~~~~~~~~~^~
/usr/local/include/ceres/internal/parameter_dims.h:74:51: note: suggested alternative: ‘ParameterDims’
IsValidParameterDimensionSequence(Parameters());
~~~~~~~~~~^~
ParameterDims
/usr/local/include/ceres/internal/parameter_dims.h:74:40: error: ‘ceres::internal::IsValidParameterDimensionSequence’ cannot be used as a function
IsValidParameterDimensionSequence(Parameters());
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~
In file included from /usr/local/include/ceres/autodiff_cost_function.h:130:0,
from /usr/local/include/ceres/ceres.h:37,
from /home/liqiang/Desktop/slambook2/ch9/bundle_adjustment_ceres.cpp:2:
/usr/local/include/ceres/internal/autodiff.h: In instantiation of ‘bool ceres::internal::AutoDifferentiate(const Functor&, const T* const*, int, T*, T**) [with int kNumResiduals = 2; ParameterDims = ceres::internal::ParameterDims<false, 9, 3>; Functor = SnavelyReprojectionError; T = double]’:
/usr/local/include/ceres/autodiff_cost_function.h:210:69: required from ‘bool ceres::AutoDiffCostFunction<CostFunctor, kNumResiduals, Ns>::Evaluate(const double* const*, double*, double**) const [with CostFunctor = SnavelyReprojectionError; int kNumResiduals = 2; int ...Ns = {9, 3}]’
/home/liqiang/Desktop/slambook2/ch9/bundle_adjustment_ceres.cpp:70:1: required from here
/usr/local/include/ceres/internal/autodiff.h:315:56: error: no type named ‘Parameters’ in ‘class ceres::internal::ParameterDims<false, 9, 3>’
using Parameters = typename ParameterDims::Parameters;
^
/usr/local/include/ceres/internal/autodiff.h:348:47: error: no type named ‘Parameters’ in ‘class ceres::internal::ParameterDims<false, 9, 3>’
Make1stOrderPerturbations<Parameters>::Apply(parameters,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
parameters_as_jets.data());
~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/autodiff.h:357:39: error: no type named ‘Parameters’ in ‘class ceres::internal::ParameterDims<false, 9, 3>’
Take1stOrderParts<Parameters>::Apply(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
num_outputs, residuals_as_jets.data(), jacobians);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/local/include/ceres/internal/autodiff.h:152:0,
from /usr/local/include/ceres/autodiff_cost_function.h:130,
from /usr/local/include/ceres/ceres.h:37,
from /home/liqiang/Desktop/slambook2/ch9/bundle_adjustment_ceres.cpp:2:
/usr/local/include/ceres/internal/variadic_evaluate.h: In instantiation of ‘bool ceres::internal::VariadicEvaluateImpl(const Functor&, const T* const*, T*, const void*) [with ParameterDims = ceres::internal::ParameterDims<false, 9, 3>; Functor = SnavelyReprojectionError; T = double]’:
/usr/local/include/ceres/internal/variadic_evaluate.h:108:45: required from ‘bool ceres::internal::VariadicEvaluate(const Functor&, const T* const*, T*) [with ParameterDims = ceres::internal::ParameterDims<false, 9, 3>; Functor = SnavelyReprojectionError; T = double]’
/usr/local/include/ceres/autodiff_cost_function.h:207:55: required from ‘bool ceres::AutoDiffCostFunction<CostFunctor, kNumResiduals, Ns>::Evaluate(const double* const*, double*, double**) const [with CostFunctor = SnavelyReprojectionError; int kNumResiduals = 2; int ...Ns = {9, 3}]’
/home/liqiang/Desktop/slambook2/ch9/bundle_adjustment_ceres.cpp:70:1: required from here
/usr/local/include/ceres/internal/variadic_evaluate.h:80:65: error: ‘ParameterBlockIndices’ was not declared in this scope
functor, input, output, IsDynamic(), ParameterBlockIndices());
~~~~~~~~~~~~~~~~~~~~~^~
CMakeFiles/bundle_adjustment_ceres.dir/build.make:82: recipe for target 'CMakeFiles/bundle_adjustment_ceres.dir/bundle_adjustment_ceres.cpp.o' failed
make[2]: *** [CMakeFiles/bundle_adjustment_ceres.dir/bundle_adjustment_ceres.cpp.o] Error 1
CMakeFiles/Makefile2:99: recipe for target 'CMakeFiles/bundle_adjustment_ceres.dir/all' failed
make[1]: *** [CMakeFiles/bundle_adjustment_ceres.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
CMakeFiles/bundle_adjustment_g2o.dir/build.make:82: recipe for target 'CMakeFiles/bundle_adjustment_g2o.dir/bundle_adjustment_g2o.cpp.o' failed
make[2]: *** [CMakeFiles/bundle_adjustment_g2o.dir/bundle_adjustment_g2o.cpp.o] Error 1
CMakeFiles/Makefile2:126: recipe for target 'CMakeFiles/bundle_adjustment_g2o.dir/all' failed
make[1]: *** [CMakeFiles/bundle_adjustment_g2o.dir/all] Error 2
Makefile:103: recipe for target 'all' failed
make: *** [all] Error 2
ubuntu18.04编译的时候出现了:
这里都编译到100%的时候,突然就报错了,原因是没有链接到fmt库
Scanning dependencies of target bal_common
[ 16%] Building CXX object CMakeFiles/bal_common.dir/common.cpp.o
[ 33%] Linking CXX static library libbal_common.a
[ 33%] Built target bal_common
Scanning dependencies of target bundle_adjustment_ceres
Scanning dependencies of target bundle_adjustment_g2o
[ 50%] Building CXX object CMakeFiles/bundle_adjustment_g2o.dir/bundle_adjustment_g2o.cpp.o
[ 66%] Building CXX object CMakeFiles/bundle_adjustment_ceres.dir/bundle_adjustment_ceres.cpp.o
[ 83%] Linking CXX executable bundle_adjustment_ceres
[ 83%] Built target bundle_adjustment_ceres
[100%] Linking CXX executable bundle_adjustment_g2o
CMakeFiles/bundle_adjustment_g2o.dir/bundle_adjustment_g2o.cpp.o: In function `fmt::v8::appender fmt::v8::detail::write<char, fmt::v8::appender>(fmt::v8::appender, fmt::v8::basic_string_view<fmt::v8::type_identity<char>::type>, fmt::v8::basic_format_specs<char> const&, fmt::v8::detail::locale_ref) [clone .isra.803]':
bundle_adjustment_g2o.cpp:(.text+0x2d22): undefined reference to `fmt::v8::detail::throw_format_error(char const*)'
CMakeFiles/bundle_adjustment_g2o.dir/bundle_adjustment_g2o.cpp.o: In function `SolveBA(BALProblem&)':
bundle_adjustment_g2o.cpp:(.text+0x3b4f): undefined reference to `fmt::v8::vprint(fmt::v8::basic_string_view<char>, fmt::v8::basic_format_args<fmt::v8::basic_format_context<fmt::v8::appender, char> >)'
bundle_adjustment_g2o.cpp:(.text+0x3b76): undefined reference to `fmt::v8::vprint(fmt::v8::basic_string_view<char>, fmt::v8::basic_format_args<fmt::v8::basic_format_context<fmt::v8::appender, char> >)'
CMakeFiles/bundle_adjustment_g2o.dir/bundle_adjustment_g2o.cpp.o: In function `unsigned long long fmt::v8::detail::width_checker<fmt::v8::detail::error_handler>::operator()<float, 0>(float) [clone .isra.258]':
bundle_adjustment_g2o.cpp:(.text.unlikely+0xc): undefined reference to `fmt::v8::detail::throw_format_error(char const*)'
CMakeFiles/bundle_adjustment_g2o.dir/bundle_adjustment_g2o.cpp.o: In function `unsigned long long fmt::v8::detail::precision_checker<fmt::v8::detail::error_handler>::operator()<float, 0>(float) [clone .isra.269]':
bundle_adjustment_g2o.cpp:(.text.unlikely+0x1c): undefined reference to `fmt::v8::detail::throw_format_error(char const*)'
CMakeFiles/bundle_adjustment_g2o.dir/bundle_adjustment_g2o.cpp.o: In function `Sophus::SO3<double, 0>::expAndTheta(Eigen::Matrix<double, 3, 1, 0, 3, 1> const&, double*)':
bundle_adjustment_g2o.cpp:(.text._ZN6Sophus3SO3IdLi0EE11expAndThetaERKN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEEPd[_ZN6Sophus3SO3IdLi0EE11expAndThetaERKN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEEPd]+0x21e): undefined reference to `fmt::v8::vprint(fmt::v8::basic_string_view<char>, fmt::v8::basic_format_args<fmt::v8::basic_format_context<fmt::v8::appender, char> >)'
bundle_adjustment_g2o.cpp:(.text._ZN6Sophus3SO3IdLi0EE11expAndThetaERKN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEEPd[_ZN6Sophus3SO3IdLi0EE11expAndThetaERKN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEEPd]+0x23e): undefined reference to `fmt::v8::vprint(fmt::v8::basic_string_view<char>, fmt::v8::basic_format_args<fmt::v8::basic_format_context<fmt::v8::appender, char> >)'
bundle_adjustment_g2o.cpp:(.text._ZN6Sophus3SO3IdLi0EE11expAndThetaERKN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEEPd[_ZN6Sophus3SO3IdLi0EE11expAndThetaERKN5Eigen6MatrixIdLi3ELi1ELi0ELi3ELi1EEEPd]+0x2ca): undefined reference to `fmt::v8::vprint(fmt::v8::basic_string_view<char>, fmt::v8::basic_format_args<fmt::v8::basic_format_context<fmt::v8::appender, char> >)'
CMakeFiles/bundle_adjustment_g2o.dir/bundle_adjustment_g2o.cpp.o: In function `VertexPoseAndIntrinsics::oplusImpl(double const*)':
bundle_adjustment_g2o.cpp:(.text._ZN23VertexPoseAndIntrinsics9oplusImplEPKd[_ZN23VertexPoseAndIntrinsics9oplusImplEPKd]+0x2bf): undefined reference to `fmt::v8::vprint(fmt::v8::basic_string_view<char>, fmt::v8::basic_format_args<fmt::v8::basic_format_context<fmt::v8::appender, char> >)'
bundle_adjustment_g2o.cpp:(.text._ZN23VertexPoseAndIntrinsics9oplusImplEPKd[_ZN23VertexPoseAndIntrinsics9oplusImplEPKd]+0x2de): undefined reference to `fmt::v8::vprint(fmt::v8::basic_string_view<char>, fmt::v8::basic_format_args<fmt::v8::basic_format_context<fmt::v8::appender, char> >)'
CMakeFiles/bundle_adjustment_g2o.dir/bundle_adjustment_g2o.cpp.o: In function `decltype (({parm#1}.begin)()) fmt::v8::formatter<fmt::v8::basic_string_view<char>, char, void>::parse<fmt::v8::basic_format_parse_context<char, fmt::v8::detail::error_handler> >(fmt::v8::basic_format_parse_context<char, fmt::v8::detail::error_handler>&)':
bundle_adjustment_g2o.cpp:(.text._ZN3fmt2v89formatterINS0_17basic_string_viewIcEEcvE5parseINS0_26basic_format_parse_contextIcNS0_6detail13error_handlerEEEEEDTcldtfp_5beginEERT_[_ZN3fmt2v89formatterINS0_17basic_string_viewIcEEcvE5parseINS0_26basic_format_parse_contextIcNS0_6detail13error_handlerEEEEEDTcldtfp_5beginEERT_]+0x268): undefined reference to `fmt::v8::detail::throw_format_error(char const*)'
bundle_adjustment_g2o.cpp:(.text._ZN3fmt2v89formatterINS0_17basic_string_viewIcEEcvE5parseINS0_26basic_format_parse_contextIcNS0_6detail13error_handlerEEEEEDTcldtfp_5beginEERT_[_ZN3fmt2v89formatterINS0_17basic_string_viewIcEEcvE5parseINS0_26basic_format_parse_contextIcNS0_6detail13error_handlerEEEEEDTcldtfp_5beginEERT_]+0x3b0): undefined reference to `fmt::v8::detail::throw_format_error(char const*)'
bundle_adjustment_g2o.cpp:(.text._ZN3fmt2v89formatterINS0_17basic_string_viewIcEEcvE5parseINS0_26basic_format_parse_contextIcNS0_6detail13error_handlerEEEEEDTcldtfp_5beginEERT_[_ZN3fmt2v89formatterINS0_17basic_string_viewIcEEcvE5parseINS0_26basic_format_parse_contextIcNS0_6detail13error_handlerEEEEEDTcldtfp_5beginEERT_]+0x3bc): undefined reference to `fmt::v8::detail::throw_format_error(char const*)'
bundle_adjustment_g2o.cpp:(.text._ZN3fmt2v89formatterINS0_17basic_string_viewIcEEcvE5parseINS0_26basic_format_parse_contextIcNS0_6detail13error_handlerEEEEEDTcldtfp_5beginEERT_[_ZN3fmt2v89formatterINS0_17basic_string_viewIcEEcvE5parseINS0_26basic_format_parse_contextIcNS0_6detail13error_handlerEEEEEDTcldtfp_5beginEERT_]+0x5c0): undefined reference to `fmt::v8::detail::throw_format_error(char const*)'
bundle_adjustment_g2o.cpp:(.text._ZN3fmt2v89formatterINS0_17basic_string_viewIcEEcvE5parseINS0_26basic_format_parse_contextIcNS0_6detail13error_handlerEEEEEDTcldtfp_5beginEERT_[_ZN3fmt2v89formatterINS0_17basic_string_viewIcEEcvE5parseINS0_26basic_format_parse_contextIcNS0_6detail13error_handlerEEEEEDTcldtfp_5beginEERT_]+0x5cc): undefined reference to `fmt::v8::detail::throw_format_error(char const*)'
CMakeFiles/bundle_adjustment_g2o.dir/bundle_adjustment_g2o.cpp.o:bundle_adjustment_g2o.cpp:(.text._ZN3fmt2v89formatterINS0_17basic_string_viewIcEEcvE5parseINS0_26basic_format_parse_contextIcNS0_6detail13error_handlerEEEEEDTcldtfp_5beginEERT_[_ZN3fmt2v89formatterINS0_17basic_string_viewIcEEcvE5parseINS0_26basic_format_parse_contextIcNS0_6detail13error_handlerEEEEEDTcldtfp_5beginEERT_]+0x5d8): more undefined references to `fmt::v8::detail::throw_format_error(char const*)' follow
CMakeFiles/bundle_adjustment_g2o.dir/bundle_adjustment_g2o.cpp.o: In function `void fmt::v8::detail::value<fmt::v8::basic_format_context<fmt::v8::appender, char> >::format_custom_arg<Eigen::Transpose<Eigen::Matrix<double, 3, 1, 0, 3, 1> const>, fmt::v8::detail::fallback_formatter<Eigen::Transpose<Eigen::Matrix<double, 3, 1, 0, 3, 1> const>, char, void> >(void*, fmt::v8::basic_format_parse_context<char, fmt::v8::detail::error_handler>&, fmt::v8::basic_format_context<fmt::v8::appender, char>&)':
bundle_adjustment_g2o.cpp:(.text._ZN3fmt2v86detail5valueINS0_20basic_format_contextINS0_8appenderEcEEE17format_custom_argIN5Eigen9TransposeIKNS8_6MatrixIdLi3ELi1ELi0ELi3ELi1EEEEENS1_18fallback_formatterISD_cvEEEEvPvRNS0_26basic_format_parse_contextIcNS1_13error_handlerEEERS5_[_ZN3fmt2v86detail5valueINS0_20basic_format_contextINS0_8appenderEcEEE17format_custom_argIN5Eigen9TransposeIKNS8_6MatrixIdLi3ELi1ELi0ELi3ELi1EEEEENS1_18fallback_formatterISD_cvEEEEvPvRNS0_26basic_format_parse_contextIcNS1_13error_handlerEEERS5_]+0x206): undefined reference to `std::locale fmt::v8::detail::locale_ref::get<std::locale>() const'
CMakeFiles/bundle_adjustment_g2o.dir/bundle_adjustment_g2o.cpp.o: In function `void fmt::v8::detail::value<fmt::v8::basic_format_context<fmt::v8::appender, char> >::format_custom_arg<Eigen::Transpose<Eigen::Matrix<double, 4, 1, 0, 4, 1> const>, fmt::v8::detail::fallback_formatter<Eigen::Transpose<Eigen::Matrix<double, 4, 1, 0, 4, 1> const>, char, void> >(void*, fmt::v8::basic_format_parse_context<char, fmt::v8::detail::error_handler>&, fmt::v8::basic_format_context<fmt::v8::appender, char>&)':
bundle_adjustment_g2o.cpp:(.text._ZN3fmt2v86detail5valueINS0_20basic_format_contextINS0_8appenderEcEEE17format_custom_argIN5Eigen9TransposeIKNS8_6MatrixIdLi4ELi1ELi0ELi4ELi1EEEEENS1_18fallback_formatterISD_cvEEEEvPvRNS0_26basic_format_parse_contextIcNS1_13error_handlerEEERS5_[_ZN3fmt2v86detail5valueINS0_20basic_format_contextINS0_8appenderEcEEE17format_custom_argIN5Eigen9TransposeIKNS8_6MatrixIdLi4ELi1ELi0ELi4ELi1EEEEENS1_18fallback_formatterISD_cvEEEEvPvRNS0_26basic_format_parse_contextIcNS1_13error_handlerEEERS5_]+0x206): undefined reference to `std::locale fmt::v8::detail::locale_ref::get<std::locale>() const'
CMakeFiles/bundle_adjustment_g2o.dir/bundle_adjustment_g2o.cpp.o: In function `void fmt::v8::detail::value<fmt::v8::basic_format_context<fmt::v8::appender, char> >::format_custom_arg<Eigen::Transpose<Eigen::Matrix<double, 4, 1, 0, 4, 1> >, fmt::v8::detail::fallback_formatter<Eigen::Transpose<Eigen::Matrix<double, 4, 1, 0, 4, 1> >, char, void> >(void*, fmt::v8::basic_format_parse_context<char, fmt::v8::detail::error_handler>&, fmt::v8::basic_format_context<fmt::v8::appender, char>&)':
bundle_adjustment_g2o.cpp:(.text._ZN3fmt2v86detail5valueINS0_20basic_format_contextINS0_8appenderEcEEE17format_custom_argIN5Eigen9TransposeINS8_6MatrixIdLi4ELi1ELi0ELi4ELi1EEEEENS1_18fallback_formatterISC_cvEEEEvPvRNS0_26basic_format_parse_contextIcNS1_13error_handlerEEERS5_[_ZN3fmt2v86detail5valueINS0_20basic_format_contextINS0_8appenderEcEEE17format_custom_argIN5Eigen9TransposeINS8_6MatrixIdLi4ELi1ELi0ELi4ELi1EEEEENS1_18fallback_formatterISC_cvEEEEvPvRNS0_26basic_format_parse_contextIcNS1_13error_handlerEEERS5_]+0x206): undefined reference to `std::locale fmt::v8::detail::locale_ref::get<std::locale>() const'
collect2: error: ld returned 1 exit status
CMakeFiles/bundle_adjustment_g2o.dir/build.make:104: recipe for target 'bundle_adjustment_g2o' failed
make[2]: *** [bundle_adjustment_g2o] Error 1
CMakeFiles/Makefile2:126: recipe for target 'CMakeFiles/bundle_adjustment_g2o.dir/all' failed
make[1]: *** [CMakeFiles/bundle_adjustment_g2o.dir/all] Error 2
Makefile:103: recipe for target 'all' failed
make: *** [all] Error 2
解决办法:在target_link_libraries后面加上fmt
target_link_libraries( direct_semidense ${OpenCV_LIBS} ${G2O_LIBS} fmt)