数年前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
、標準ヘッダーでいくつかの変更があったため、 (a)を知らせるcstddef
ためにヘッダーを含める必要があることがわかりました。ptrdiff_t
そのため、プロジェクトを使用して再コンパイルした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
。代わりにプロジェクトファイルでそれを行うべきでしたか?