为 Matlab R2016a 编译 LIBSVM

Compiling LIBSVM for Matlab R2016a

我想在 Windows 7 64 位和 MinGW64 编译器下将 LiBSVM 与 Matlab R2016a 结合使用,预编译的 mex 文件对我不起作用。 当我尝试 运行 LibSVM 附带的标准 make 文件时,出现以下错误: *用 'MinGW64 Compiler (C)' 构建。 使用 mex 时出错 gcc: 错误: -fexceptions: 没有那个文件或目录 * 生成文件如下所示:

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

在另一个对 Whosebug 问题的回答中,我看到有人使用这段代码进行编译:

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 选择了一个 c 语言版本,该版本在 windows 下没有为 gcc 完全实现,而 -O 优化了目标代码。在 http://www.csie.ntu.edu.tw/~cjlin/libsvm/faq.html#f213 中,开发人员提到他们实际上没有使用任何 c99 语言功能。 所以编译库应该没有缺点吧?

"error: -fexceptions: No such file or directory."也可以通过将CFLAGS改成COMPFLAGS来解决。

信用https://github.com/cjlin1/libsvm/issues/55