В Matlab отсутствует MEX-файл зависимостей

У меня есть скрипт в матлабе, который вызывает другие библиотеки. Я использую Matlab версии 2012a на Linux. Я получаю ошибку ниже, и я не знаю, как ее исправить.

Ошибка:

Неверный MEX-файл '/home/XXX/nearest_neighbors.mexa64': libflann.so.1.8: невозможно открыть общий объектный файл: нет такого файла или каталога

Ошибка в flann_search (строка 82) [индексы,расстояния] = ближайшие_соседи('find_nn', данные, набор тестов, n, параметры);

Ошибка в MyScript (строка 73) [nresult, ndists] = flann_search(Ntraindata', Ntraindata', resu.KNN, struct('algorithm','composite',...


person Ehsan Sadr    schedule 18.03.2015    source источник


Ответы (1)


Эта библиотека, на которую вы ссылаетесь — https://github.com/mariusmuja/flann/ — имеет nearest_neighbors функция, написанная в коде MEX. Код MEX — это код C, который используется для взаимодействия с MATLAB. Люди обычно пишут код с большими вычислительными затратами на MEX, поскольку известно, что он быстрее обрабатывает циклы и другие вещи. Входные данные поступают из MATLAB и отправляются в эту функцию MEX, а выходные данные поступают из функции MEX и передаются обратно в MATLAB. По сути, это хороший черный ящик, в котором вы можете использовать его так же, как и любую другую функцию MATLAB. На самом деле, многие функции, поставляемые с MATLAB, имеют оболочки MEX, написанные для обеспечения ускорения.

Вы получаете эту ошибку, потому что вам нужно скомпилировать функцию nearest_neighbors, чтобы была оболочка MEX, которую можно было бы вызвать в MATLAB. Эта оболочка отсутствует, потому что вы не скомпилировали код.

Во-первых, вам нужно настроить MEX. Убедитесь, что у вас есть компилятор, совместимый с вашей версией MATLAB. Вы можете сделать это, перейдя по этой ссылке:

http://www.mathworks.com/support/compilers/R20xxy/index.html

xx — это номер версии, принадлежащий вашему MATLAB, а y — это код символа, который следует за ним. Например, если вы используете R2013a, вы должны посетить:

http://www.mathworks.com/support/compilers/R2013a/index.html

Оказавшись там, перейдите в свою операционную систему и убедитесь, что у вас установлен один из поддерживаемых компиляторов. После того, как вы это установили, войдите в MATLAB и в командной строке введите:

mex -setup

Это позволит вам настроить MEX и выбрать нужный компилятор. Учитывая вашу ошибку, вы используете 64-разрядную версию Linux, поэтому вам будет очень легко получить GCC. Просто убедитесь, что вы выбрали версию GCC, совместимую с вашей версией MATLAB. Выбрав компилятор, вы можете скомпилировать код, выполнив это в командной строке:

>> mex -v -O nearest_neighbors.cpp

Это должно сгенерировать для вас файл nearest_neighbors MEX. Как только это будет сделано, вы можете запустить код.


Более подробные инструкции см. в руководстве пользователя FLANN — http://people.cs.ubc.ca/~mariusm/uploads/FLANN/flann_manual-1.8.4.pdf — здесь рассказывается, как собрать и скомпилировать его для использования в MATLAB.


Удачи!

person rayryeng    schedule 18.03.2015