MSYS2上的gcc 8.2.1的特征编译错误

问题描述 投票:2回答:1

我们是facing errors针对Eigen 3.3.7(可能是旧版本)针对MSYS2提供的最新版GCC 8.2.1进行编译。奇怪的是,这只发生在同一个软件包的最新版本中(mingw-w64-x86_64-gcc 8.2.1):

  • 8.2.1 + 20181123-1:很好
  • 8.2.1 + 20181130-1:错误
  • 8.2.1 + 20181207-1:错误

错误是:

In file included from C:/Users/donald/msys64/mingw64/include/eigen3/Eigen/SparseCore:50,
                 from C:/Users/donald/msys64/mingw64/include/eigen3/Eigen/Sparse:26,
                 from C:/Users/donald/msys64/mingw64/include/eigen3/Eigen/Eigen:2,
                 from src/registration/transform/search.h:21,
                 from src/registration/transform/initialiser_helpers.cpp:20:
C:/Users/donald/msys64/mingw64/include/eigen3/Eigen/src/SparseCore/SparseBlock.h: In member function 'Eigen::internal::sparse_matrix_block_impl<SparseMatrixType, BlockRows, BlockCols>::BlockType& Eigen::internal::sparse_matrix_block_impl<SparseMatrixType, BlockRows, BlockCols>::operator=(const BlockType&)':
C:/Users/donald/msys64/mingw64/include/eigen3/Eigen/src/SparseCore/SparseBlock.h:216:33: error: expected primary-expression before '>' token
       return operator=<BlockType>(other);

                             ^

我假设这是MSYS2提供的GCC包中的一个错误,而不是Eigen(据我所知,SparseBlock.h文件暂时没有改变)。不同的GCC是否基于相同的源代码构建?知道问题可能是什么吗?


编辑:这是一个MCVE:

TEST.CPP:

#include <Eigen/Eigen>
int main () { return 0; }

使用g ++ 8.2.1编译(版本8.2.1 + 20181130-1或更新版本 - 旧版本没有错误):

$ g++ $(pkg-config --cflags eigen3) test.cpp -o test
In file included from C:/Users/donald/msys64/mingw64/include/eigen3/Eigen/SparseCore:50,
                 from C:/Users/donald/msys64/mingw64/include/eigen3/Eigen/Sparse:26,
                 from C:/Users/donald/msys64/mingw64/include/eigen3/Eigen/Eigen:2,
                 from test.cpp:1:
C:/Users/donald/msys64/mingw64/include/eigen3/Eigen/src/SparseCore/SparseBlock.h: In member function 'Eigen::internal::sparse_matrix_block_impl<SparseMatrixType, BlockRows, BlockCols>::BlockType& Eigen::internal::sparse_matrix_block_impl<SparseMatrixType, BlockRows, BlockCols>::operator=(const BlockType&)':
C:/Users/donald/msys64/mingw64/include/eigen3/Eigen/src/SparseCore/SparseBlock.h:216:33: error: expected primary-expression before '>' token
       return operator=<BlockType>(other);
                                 ^
c++ gcc eigen eigen3 msys2
1个回答
3
投票

进一步调查表明这确实是一个GCC错误。我有reported this on GCC Bugzilla,我会关闭这个帖子。谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.