为Matlab R2016a编译LIBSVM

时间:2016-05-30 07:05:53

标签: matlab gcc libsvm mingw-w64

我希望在Windows 7 64位下使用带有Matlab R2016a的LiBSVM和MinGW64编译器,并且预编译的mex文件对我不起作用。 当我尝试运行LibSVM附带的标准make文件时,会发生以下错误: *使用'MinGW64编译器(C)'构建。 使用mex时出错 gcc:错误:-fexceptions:没有这样的文件或目录 * makefile如下所示:

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

在stackoverflow问题的另一个答案中,我看到有人使用此代码进行编译:

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语言功能。 所以编译库应该没有缺点,对吧?

1 个答案:

答案 0 :(得分:2)

"错误:-fexceptions:没有这样的文件或目录。"也可以通过将CFLAGS更改为COMPFLAGS来解决。

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