Проблемы сборки с G ++ на MATLAB - PullRequest
0 голосов
/ 29 марта 2019

Я немного новичок в MATLAB, но сейчас пытаюсь собрать MEX-файлы, используя G ++ (версия 6.3) в качестве компилятора. Я получил эту ошибку

MEX completed successfully.
Building with 'g++'.
Error using mex
/disks/local/sceneflow2/./external/libtrws/trwsMex.cpp:14:13: error: conflicting declaration ‘typedef
int mwSize’
In file included from /usr/local/MATLAB/R2016a/extern/include/matrix.h:25:0,
                 from /usr/local/MATLAB/R2016a/extern/include/mex.h:51,
                 from /disks/local/sceneflow2/./external/libtrws/trwsMex.cpp:9:
/usr/local/MATLAB/R2016a/extern/include/tmwtypes.h:795:19: error: ‘mwSize’ has a previous
declaration as ‘typedef size_t mwSize’
/disks/local/sceneflow2/./external/libtrws/trwsMex.cpp:15:13: error: conflicting declaration ‘typedef
int mwIndex’
In file included from /usr/local/MATLAB/R2016a/extern/include/matrix.h:25:0,
                 from /usr/local/MATLAB/R2016a/extern/include/mex.h:51,
                 from /disks/local/sceneflow2/./external/libtrws/trwsMex.cpp:9:
/usr/local/MATLAB/R2016a/extern/include/tmwtypes.h:796:19: error: ‘mwIndex’ has a previous
declaration as ‘typedef size_t mwIndex’


Error in make_mex (line 20)
mex ./external/libtrws/trwsMex.cpp -largeArrayDims CXXFLAGS="\$CXXFLAGS -std=c++0x -fpermissive"
-outdir build

Я не понимаю. Почему /usr/local/MATLAB/R2016a/extern/include/tmwtypes.h определение mwSize противоречит /usr/local/MATLAB/R2016a/extern/include/mex.h? Разве это не предопределенные библиотеки, включенные в MATLAB (то есть они должны работать нормально?)

Кстати, /disks/local/sceneflow2/./external/libtrws/trwsMex.cpp имеет строку, которая включает в себя вышеупомянутый mex.h.

1 Ответ

2 голосов
/ 29 марта 2019

Сообщение об ошибке должно содержать блоки (для двух разных ошибок), давайте рассмотрим только первое. Я разделил его на три "строки":

/disks/local/sceneflow2/./external/libtrws/trwsMex.cpp:14:13: error: conflicting declaration
‘typedef int mwSize’

In file included from /usr/local/MATLAB/R2016a/extern/include/matrix.h:25:0,
                 from /usr/local/MATLAB/R2016a/extern/include/mex.h:51,
                 from /disks/local/sceneflow2/./external/libtrws/trwsMex.cpp:9:

/usr/local/MATLAB/R2016a/extern/include/tmwtypes.h:795:19: error: ‘mwSize’ has a previous
declaration as ‘typedef size_t mwSize’

Первая строка говорит, что компилятор нашел объявление для mwSize в строке 14 вашего trwsMex.cpp файла, где написано typedef int mwSize.

Последняя строка говорит, что этот mwSize уже был определен в заголовке tmwtypes.h, который поставляется с MATLAB.

Вторая строка говорит, что этот заголовочный файл был включен matrix.h, который включен mex.h, который включен вашим trwsMex.cpp в строке 9.


Итак, чтобы исправить ошибку, не определяйте mwSize и mwIndex в исходном коде вашего MEX-файла, они определяются заголовками MATLAB.

...