数学建模社区-数学中国
标题:
求助:关于混合编程的错误,用mex编译就出现 - MATLAB 应用发布
[打印本页]
作者:
深叶子
时间:
2014-8-23 20:04
标题:
求助:关于混合编程的错误,用mex编译就出现 - MATLAB 应用发布
如何实现C语言与MATLAB接口,出现 E:\PROGRA~1\MATLAB\R2012\BIN\MEX.PL: Error: No file names given. .错误。
' h2 W5 c0 W5 S
这该怎么解决啊?
) ?6 G C- a3 A# L4 b$ j
》mex-setup
% Z9 E, q2 f: C" X9 p1 p( K7 ]
Usage:
1 d' n: {( n" e1 z
MEX [option1 ... optionN] sourcefile1 [... sourcefileN]
8 h. j- P5 X" V/ Z& V) Y0 b' ~. o
[objectfile1 ... objectfileN] [libraryfile1 ... libraryfileN]
" S) v- n( q/ a" N |" M& p' u
+ e6 b8 o$ x# _
Use the -help option for more information, or consult the MATLAB API Guide.
( ~# L, s# R0 P* C
: `9 c0 }% R8 t0 A8 G( B4 J# J' |
4 I% M3 u8 f4 K, M+ k: L! y
E:\PROGRA~1\MATLAB\R2012\BIN\MEX.PL: Error: No file names given.
5 W, ]% s$ w3 t d
' F9 ~- t. n4 j1 J1 v
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
网上找到这个总结的不错,你可以借鉴!
1 V1 K/ x5 K( F. q( Z/ C" L
9 `" p. N8 M* x' M
在matlab上使用libsvm工具箱使用错误及解决方法汇总
$ e) `: Q' s, ?
首先附上使用过程
6 ^. I3 \8 q8 }) r9 M3 }
step1: 输入>>mex -setup
6 T" e! x$ _$ f" q1 H- B1 E1 |
step2:
. o8 \4 }5 a. B+ s$ D7 T
Please choose yourcompiler for building external interface (MEX) files:
1 q$ ?6 Q& U- `. J5 F
Would you like mex to locate installed compilers [y]/n? 是否让matlab自动检测编译器可以选y
I, g$ Q* T( R/ f' j/ q; }4 W/ }
step3:
- [. x9 p6 x/ W' m+ ~% M( j2 D
Select a compiler:
3 _9 {" B2 E+ _( i1 t, w" O
7 Q( D- h7 [( k6 j9 B# X9 I
# y( X) o) D6 r9 c( L
[1] Lcc-win32 C2.4.1 in E:\PROGRA~1\MATLAB\R2010a\sys\lcc
. i* l1 w _" x9 d
[2] MicrosoftVisual C++ 2008 SP1 in e:\Program Files\Microsoft Visual Studio 9.0
- j% H, t& K5 M! q4 M
[3] MicrosoftVisual C++ 6.0 in E:\Program Files\Microsoft Visual Studio
4 P+ E; @% h) N) m
[0] None
" e6 G& S- R' s1 A9 r3 A7 D4 l
[1]matlab 自带的不能用 其他的如果有的话 就相应的选择就行
( d- @7 [+ i6 g) i
我选择了 【2】
* b1 i6 B% w9 N% d3 J8 @: M
step4:
) k0 A, z/ _( v/ C3 g; |6 k L
Compiler: Microsoft Visual C++ 2008 SP1
. S, I3 X- t7 d7 C7 u0 a# t! V
Location:e:\Program Files\Microsoft Visual Studio 9.0
9 [ g, e2 |' \" \% a
Are thesecorrect [y]/n? 路径是否正确 是的就选y
5 a7 L% D2 _) U1 s% R9 `( c
如果没有自动检测出来依次的话step2就选【n】就可以,再顺着提示下来。
' B6 y2 q! o! m
Step 5
; |8 j6 |1 J6 a1 A! v
Make
6 L1 ]; U1 R6 H8 J/ }
后面就是:
# S5 @1 z# L9 ^% F2 ]$ v& b; T
load heart_scale.mat(此处无分号)
: X+ Q8 b; @, `# H K$ c
train = heart_scale_inst;
, o6 Z) r, l. S
train_label=heart_scale_label;
@2 M6 o# A. N$ ]6 }. g1 X0 g1 j
test=train;
/ J% k3 l& G, ^" |: D6 P
test_label=train_label;
9 i6 t. A5 [2 `6 @: v" n. u- k
model=svmtrain(train_label,train,'-c 2 -g0.01');
' e" M6 f' ` Y9 y0 Z. {
[predict_label,accuracy]=svmpredict(test_label,test,model);
" Q; n6 A8 b$ A4 w4 ~, o
1
2 @8 s9 N4 a" y; I/ L# I
make这一步报错
2 o4 Q9 e+ i) z$ N' A
Error using mex (line 206)
& M: L# B6 F6 Q; n
Unable to complete successfully.
9 }0 v# p* v' f+ Z* ]5 B9 k) e8 j
Error in make (line 1)
9 k+ z' q' T% V v
% This make.m is for MATLAB and OCTAVE
( L6 J/ F# h( a* U& g; H$ d2 {( d
under Windows, Mac, and Unix
6 |5 n0 h" w; m5 I: ? L- k
在尝试了许多方法后,竟然是换了低版本的libsvm,搞定了~~~
* L4 d6 e$ e- [, r
2 a- q8 ~" J2 T3 h1 }
2 还有一个make这一步出现的错误3 Make时出错
# o% b8 n- E4 e5 ^2 r
Undefined function orvariable 'make'
2 i3 H" O% c$ |% s) n* P2 |2 J
解决方法为:
; e. j$ @) F; ~+ b0 B$ R; n- s
设置matlab的path
, @0 w5 }( k& C2 b' a. h
方法file->set path->set subpath(为什么要sub path因为只有这样才能将你要加的文件目录的子文件都加进去,否则只是加了你所要加的那个目录。)
4 F9 |3 g! ^8 d4 B8 D
还要记得把current folder 设为matlab所在的路径
# M! d5 Z4 [) }% T+ X, l/ X
3 输入load heart_scale.mat;报错
) A1 A: p" e8 B! F! t6 z+ u
Error using load
( S/ P; ?3 l8 P( J3 X
Unable to read file heart_scale.mat;: No
( Z) ?) K# f1 u6 ], X+ f
such file or directory.
- p0 E+ A7 `5 B) C& Z m
这个问题是这样的,不应该有最后那个; 去掉分号就可以了。。。(粗心所致。。。不知道别人会不会像我这样。。。)
( O. [2 M2 P& V2 v, i
4
t' b$ @9 l6 r9 z
load 这一步报错
' @; x2 @; ^) O) w+ S. ^
??? Error using ==>load
, Z2 K C A' X( @3 V) O. `, L
Number of columns on line 2 of ASCII file D:\Program
5 e$ ]) y+ f+ X L" G
Files\MATLAB2010\matlab\toolbox\libsvm-3.13\heart_scale
7 c6 K5 ?; v ^5 n
must be the same as previous lines.
& ?, Z8 g+ a) E% c0 Y5 |
官方现在不给heart_scale.mat,给的都是VC++下的格式。一些旧版本的工具箱还可以找到mat文件,新版本都没有了。所以load会报错:heart_scalemust be same as previous lines)
- i4 Y% i$ [7 F1 p* f! d2 i" H
一种解决方法是:使用给的一个函数,转化数据。此函数为libsvmread()
2 @1 L& }! b' n7 m- T! ~; j4 E4 y
使用如下: [label_vector, instance_matrix] =libsvmread('filename');
0 f9 Y7 z2 J2 w3 ^# E
此处为了跟官方统一名称可以[heart_scale_label,heart_scale_inst] =libsvmread('heart_scale');
" w! R4 T9 \* k }3 Z& p$ U
注意:由于heart_scale在libsvm-3.11目录下,不是在matlab下,所以直接用libsvmread命令会报错,要买改变当前路径,或者使用[heart_scale_label,heart_scale_inst]=libsvmread('../heart_scale');../代表返回上层路径。
+ x# F; K h( f! O2 `. O
但是最简单的方法是,找到旧版本工具箱的mat文件添加上即可!
1 P4 ^6 T1 o! N
/ l- X" i# z A( \" N
6 v7 ~0 g( F% \8 }
1 {, e+ g8 q; t
7 r5 s6 p! V; {" v2 e. L9 p
5 到svmtrain这一步报错
. }! f6 M0 Y# ]; N
??? Errorusing ==>svmtrain at 172
, I8 f1 d4 U$ I4 W# s3 c9 n$ x8 q1 y
Group mustbe a vector.
# u$ [+ m u* @* C, ^5 u; n3 m
是因为在添加工具箱的时候没有添加完全,file-Set Path-Add with Subfold ...添加好路径就可以了
~& @- e$ o! x, o" H* F; c6 m
在使用过程中到目前只遇到这些错误~现在也只是会简单的用libsvm工具箱……
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5