几年前,我不得不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 2
与g++ 4.7
编译器一起使用,或者使用更新的版本并调整代码是否更好?(或使用与以前相同的编译器,g++ 4.4
)
(a)我将cstddef
标题直接包含在MTL
文件中。我应该在项目文件中完成它吗?