Компиляция LIBSVM для Matlab R2016a

Я хочу использовать LiBSVM с Matlab R2016a под Windows 7 64 Bit с компилятором MinGW64, и предварительно скомпилированные mex-файлы у меня не работают. Когда я попытался запустить стандартный make-файл, который поставляется с LibSVM, произошла следующая ошибка: * Сборка с 'MinGW64 Compiler (C)'. Ошибка при использовании mex gcc: error: -fexceptions: Нет такого файла или каталога * Make file выглядит следующим образом:

mex CFLAGS="\$CFLAGS -std=c99" -largeArrayDims libsvmread.c
mex CFLAGS="\$CFLAGS -std=c99" -largeArrayDims libsvmwrite.c
mex CFLAGS="\$CFLAGS -std=c99" -I.. -largeArrayDims svmtrain.c ../svm.cpp svm_model_matlab.c
mex CFLAGS="\$CFLAGS -std=c99" -I.. -largeArrayDims svmpredict.c ../svm.cpp svm_model_matlab.c

В другом ответе на вопрос stackru я увидел, что кто-то использовал этот код для компиляции:

mex -O -largeArrayDims libsvmread.c
mex -O -largeArrayDims libsvmwrite.c
mex -O -I.. -largeArrayDims svmtrain.c ../svm.cpp svm_model_matlab.c
mex -O -I.. -largeArrayDims svmpredict.c ../svm.cpp svm_model_matlab.c

Это также работает для меня. В чем разница между двумя способами компиляции LibSVM и есть ли недостатки использования второго варианта?

редактировать: это тот вопрос, который я упомянул: http://ch.mathworks.com/matlabcentral/newsreader/view_thread/297195 после более подробного исследования я понял, что -std=c99 выбирает версию на языке ac, которая не полностью реализована для gcc под windows и -O оптимизирует объектный код. В http://www.csie.ntu.edu.tw/~cjlin/libsvm/faq.html разработчики упоминают, что на самом деле они не использовали никаких возможностей языка C99. Таким образом, компиляция библиотеки не должна иметь недостатков, верно?

1 ответ

Решение

Ошибка: -fexceptions: нет такого файла или каталога. Также может быть решена путем изменения CFLAGS на COMPFLAGS.

Кредит https://github.com/cjlin1/libsvm/issues/55

Другие вопросы по тегам