数学建模社区-数学中国
标题:
求助:关于混合编程的错误,用mex编译就出现 - MATLAB 应用发布
[打印本页]
作者:
深叶子
时间:
2014-8-23 20:04
标题:
求助:关于混合编程的错误,用mex编译就出现 - MATLAB 应用发布
如何实现C语言与MATLAB接口,出现 E:\PROGRA~1\MATLAB\R2012\BIN\MEX.PL: Error: No file names given. .错误。
; C* J: [) a8 ]( R/ g
这该怎么解决啊?
B6 l3 H C4 b- N; W+ t
》mex-setup
( y1 w& K# O8 F1 {/ T' b
Usage:
! I4 \2 X' f6 V. a" r9 @+ s4 K5 l
MEX [option1 ... optionN] sourcefile1 [... sourcefileN]
2 R a* I/ G5 E' L% r/ Y
[objectfile1 ... objectfileN] [libraryfile1 ... libraryfileN]
* Q4 V3 k* r+ H
R/ h/ p. ]2 G9 l5 B3 I
Use the -help option for more information, or consult the MATLAB API Guide.
+ c( D; ]' e/ P! B. R; ~
! m" I# }% Q' m7 c. Z& s
3 w* ^1 U" d$ v; A9 ]( R
E:\PROGRA~1\MATLAB\R2012\BIN\MEX.PL: Error: No file names given.
( x0 ?+ Z) e1 c9 M$ P# G! v. s8 Z
$ L# b* L+ J7 f; l
Undefined function or variable 'setup'.
作者:
madio
时间:
2014-8-23 22:12
编译文件的时候后面要加上需要编译的文件的名字,貌似就是这个问题。Undefined function or variable 'setup'是不是mex后面没有加一个空格,你改成mex -setup试试
作者:
madio
时间:
2014-8-23 22:13
网上找到这个总结的不错,你可以借鉴!
: o: Q$ X" s) N6 g6 B5 ?4 R. t0 x5 L
$ R* z1 }0 y( h
在matlab上使用libsvm工具箱使用错误及解决方法汇总
T9 f# p0 p2 s8 g( N1 w4 a
首先附上使用过程
. {6 F Y0 p7 v( y- R3 U# x5 J) f
step1: 输入>>mex -setup
) y" {- L) X- e3 b, }* g
step2:
. C* K; q! R/ ^3 l% E6 W) ?, U+ C$ D
Please choose yourcompiler for building external interface (MEX) files:
& c1 I1 R4 f5 d2 H4 }" d& v2 {
Would you like mex to locate installed compilers [y]/n? 是否让matlab自动检测编译器可以选y
( _% W {5 ?0 u
step3:
2 ? z2 p; e+ |& R) c8 T! n
Select a compiler:
- V; X) f- t' b" v) q% @& H
1 }+ [" D0 u- c. b1 j8 H& i
8 Y8 j! H! t% |% |5 y6 S4 ]
[1] Lcc-win32 C2.4.1 in E:\PROGRA~1\MATLAB\R2010a\sys\lcc
) t& u; o! W) R
[2] MicrosoftVisual C++ 2008 SP1 in e:\Program Files\Microsoft Visual Studio 9.0
- M- h8 i% e) f2 E; ?& V" k
[3] MicrosoftVisual C++ 6.0 in E:\Program Files\Microsoft Visual Studio
: q6 U) C6 m- s/ s
[0] None
: z& N9 v) A! z
[1]matlab 自带的不能用 其他的如果有的话 就相应的选择就行
; _( Q" q9 n( c
我选择了 【2】
( O; \! t( h4 \, a+ N E1 c" N
step4:
' e) q! F8 O# b9 w+ m8 ~
Compiler: Microsoft Visual C++ 2008 SP1
/ j, v: q* [& y5 C: `+ b. B6 l
Location:e:\Program Files\Microsoft Visual Studio 9.0
" q$ L) n/ g2 W- ^6 X) i( B
Are thesecorrect [y]/n? 路径是否正确 是的就选y
* n; ]0 c% {0 H- i1 V# a8 y
如果没有自动检测出来依次的话step2就选【n】就可以,再顺着提示下来。
& |" C/ H4 j5 A/ ]/ `
Step 5
; s Z' h* {7 k3 C* W
Make
; M8 R% T5 Q k
后面就是:
+ A" j4 [0 q' v2 R
load heart_scale.mat(此处无分号)
2 I1 S5 C& A+ h) x& K. b4 D
train = heart_scale_inst;
1 [0 ~# ?. l7 L2 x
train_label=heart_scale_label;
4 t4 q; n8 n5 c0 ]1 W& a5 I# s
test=train;
: c* C, B% l& S# Y$ {
test_label=train_label;
+ y) S A) U, @
model=svmtrain(train_label,train,'-c 2 -g0.01');
0 q) D; Y+ F! b) x
[predict_label,accuracy]=svmpredict(test_label,test,model);
6 w$ Z! m* [8 W; K
1
2 R, \! y% ?8 o& ?! s5 p$ F
make这一步报错
) U. ?. E) D1 v* q4 o( T6 e0 x0 F
Error using mex (line 206)
$ c: ~( n+ P) d6 y; X3 H0 R& n; Q
Unable to complete successfully.
9 F, z) s) ^: J4 T, x% P
Error in make (line 1)
/ f- v* ^* j1 S& P5 O% R! ^
% This make.m is for MATLAB and OCTAVE
; g( B! M5 U c! z
under Windows, Mac, and Unix
/ G y8 @0 A) e8 Q! I# v5 O
在尝试了许多方法后,竟然是换了低版本的libsvm,搞定了~~~
9 z. C3 [7 \: p! j
. i; Z {7 H/ K/ ]" A4 q
2 还有一个make这一步出现的错误3 Make时出错
6 } i$ W, p( C1 J+ F ?) H
Undefined function orvariable 'make'
! k5 p c8 Q$ I; A
解决方法为:
; ]( v8 G; F. f8 k" F" d; }* x
设置matlab的path
0 |0 m( O# H7 x
方法file->set path->set subpath(为什么要sub path因为只有这样才能将你要加的文件目录的子文件都加进去,否则只是加了你所要加的那个目录。)
1 d1 _) f: {, x* W1 h
还要记得把current folder 设为matlab所在的路径
2 t. ^; L, Q0 I0 {# Q
3 输入load heart_scale.mat;报错
; G" g; h5 @1 v2 D* o
Error using load
6 B1 G/ O+ N; v# B v! A$ ]
Unable to read file heart_scale.mat;: No
8 g/ N, u" b) G! L7 `2 ?
such file or directory.
) o4 S8 |/ B" m4 Z5 m, z
这个问题是这样的,不应该有最后那个; 去掉分号就可以了。。。(粗心所致。。。不知道别人会不会像我这样。。。)
, v4 u" w; O$ h3 j) x: A
4
& S: G# ]! I \! C( e( M& V' d
load 这一步报错
' F" p7 b& d; y0 g% h
??? Error using ==>load
2 g, f) k' ^* y* M, X/ ~) ?
Number of columns on line 2 of ASCII file D:\Program
! K- ]: s+ X+ y. P
Files\MATLAB2010\matlab\toolbox\libsvm-3.13\heart_scale
* s3 N: z8 W+ ^% n
must be the same as previous lines.
. u- [. [) y1 a4 U# U
官方现在不给heart_scale.mat,给的都是VC++下的格式。一些旧版本的工具箱还可以找到mat文件,新版本都没有了。所以load会报错:heart_scalemust be same as previous lines)
2 }2 q0 E3 X; _6 ~
一种解决方法是:使用给的一个函数,转化数据。此函数为libsvmread()
/ A2 v* |& s" J; @* x
使用如下: [label_vector, instance_matrix] =libsvmread('filename');
0 }; G' s8 T4 G$ N( J. W( G" K7 T
此处为了跟官方统一名称可以[heart_scale_label,heart_scale_inst] =libsvmread('heart_scale');
' ]+ v* O$ \! f: }, B
注意:由于heart_scale在libsvm-3.11目录下,不是在matlab下,所以直接用libsvmread命令会报错,要买改变当前路径,或者使用[heart_scale_label,heart_scale_inst]=libsvmread('../heart_scale');../代表返回上层路径。
- y5 t6 g* G+ j- Z, I7 |. ~
但是最简单的方法是,找到旧版本工具箱的mat文件添加上即可!
2 f% B' j$ k: e( d) G! ~
( w' j% t) U: A/ ^+ D& t! ~+ r
V T/ d; m$ [
, `* V$ {3 N$ t2 R: t. X9 C) s) ?
& Y7 t3 V9 H+ t5 U8 I5 L- Q# K
5 到svmtrain这一步报错
! }2 f2 B$ r, B
??? Errorusing ==>svmtrain at 172
& x! f! {" n9 }( l( Y3 p# h
Group mustbe a vector.
, W9 q' ?7 s; _7 M
是因为在添加工具箱的时候没有添加完全,file-Set Path-Add with Subfold ...添加好路径就可以了
/ L& ~. Z0 ^: m/ T1 Q7 X6 ^' Q
在使用过程中到目前只遇到这些错误~现在也只是会简单的用libsvm工具箱……
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5