Несколько лет назад мне пришлось использовать 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
Google немного я обнаружил, что с g++ 4.6
некоторые вещи изменились в стандартных заголовках и что мне нужно было включить 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
)
(А) Я включил cstddef
Заголовок прямо в MTL
файлы. Должен ли я сделать это в файлах проекта вместо этого?
Задача ещё не решена.
Других решений пока нет …