1

几年前,我不得不MTL 2在我职业生涯的最后一个项目中使用该库(这是一项强制性要求)。我必须处理现有的(而且相当旧的)代码,而我使用的编译器是g++ 4.4.

现在,我想继续致力于该项目以尝试改进它。我想用一些C++11功能,既然Debian Wheezy自带了g++ 4.7,我想我会用的。

因此,我安装MTL 2并尝试编译该项目。但是我收到了一个关于未知的错误ptrdiff_t

error: expected type-specifier before ‘ptrdiff_t’
error: expected ‘>’ before ‘ptrdiff_t’
error: template argument 4 is invalid

谷歌了一下,我发现由于g++ 4.6标准标题中的某些内容发生了变化,并且我需要包含cstddef标题才能ptrdiff_t知道(a)

所以我将该头MTL 2文件包含在使用ptrdiff_t和重新编译项目的文件中。但是,出现了一个新错误:

In file included from /usr/local/include/mtl/matrix.h:41:0,
             from /usr/local/include/mtl/mtl2lapack.h:20,
             from MCl_Eigen.cpp:36:
/usr/local/include/mtl/envelope2D.h:72:20: error: declaration of ‘typedef struct mtl::twod_tag mtl::envelope2D<T>::dimension’ [-fpermissive]
In file included from /usr/local/include/mtl/matrix_implementation.h:25:0,
             from /usr/local/include/mtl/matrix.h:33,
             from /usr/local/include/mtl/mtl2lapack.h:20,
             from MCl_Eigen.cpp:36:
/usr/local/include/mtl/dimension.h:19:7: error: changes meaning of ‘dimension’ from ‘class mtl::dimension<typename mtl::dense1D<T>::size_type>’ [-fpermissive]
make: *** [MCl_Eigen.o] Error 1

我的问题是,是否有一种方法可以MTL 2g++ 4.7编译器一起使用,或者使用更新的版本并调整代码是否更好?(或使用与以前相同的编译器,g++ 4.4

(a)我将cstddef标题直接包含在MTL文件中。我应该在项目文件中完成它吗?

4

0 回答 0