数学建模社区-数学中国
标题:
求助:关于混合编程的错误,用mex编译就出现 - MATLAB 应用发布
[打印本页]
作者:
深叶子
时间:
2014-8-23 20:04
标题:
求助:关于混合编程的错误,用mex编译就出现 - MATLAB 应用发布
如何实现C语言与MATLAB接口,出现 E:\PROGRA~1\MATLAB\R2012\BIN\MEX.PL: Error: No file names given. .错误。
4 `& y& l( Y. F6 R
这该怎么解决啊?
" `; ~ M& D* b. y9 K2 z+ A
》mex-setup
0 D" C) j6 J2 H# O& K
Usage:
$ q5 Z! ~8 e {: I" S1 k u
MEX [option1 ... optionN] sourcefile1 [... sourcefileN]
6 a' I3 u* }( |" p# x8 Q/ m" o
[objectfile1 ... objectfileN] [libraryfile1 ... libraryfileN]
9 r3 f& j& k: j2 V" I3 a
* E, m/ o! C( c) ^
Use the -help option for more information, or consult the MATLAB API Guide.
; ]9 [( {! d F) z* @
9 I: s, e4 X7 O9 ?) T
6 E% n b+ a; P# i6 z
E:\PROGRA~1\MATLAB\R2012\BIN\MEX.PL: Error: No file names given.
0 j6 q6 L6 A+ m2 A
9 f! w# y/ W: W# s/ _
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
网上找到这个总结的不错,你可以借鉴!
( y% `3 `. c0 V& L
1 j; i! S0 x2 g9 m& h3 G" }2 M
在matlab上使用libsvm工具箱使用错误及解决方法汇总
+ O9 w7 k4 ?6 l' N* ^4 \
首先附上使用过程
G; n6 ?* o1 q9 w& D# ]& L* v" l
step1: 输入>>mex -setup
' j1 A, X5 E4 n9 v3 T7 \$ n8 P% J
step2:
?0 |9 t# e# O# w4 m% o1 j7 H
Please choose yourcompiler for building external interface (MEX) files:
, O8 k2 [' S1 f9 Q/ y; ^+ r" H/ U
Would you like mex to locate installed compilers [y]/n? 是否让matlab自动检测编译器可以选y
0 _' R9 P! D# u, _+ W
step3:
& y. H. H1 l3 |" a
Select a compiler:
5 g" i2 t% d# \* `, ~( f: t# K
- W3 I3 ?0 O; X P" ^
6 Z A/ z, L) M0 x- x `" T3 F
[1] Lcc-win32 C2.4.1 in E:\PROGRA~1\MATLAB\R2010a\sys\lcc
3 R3 v6 b& N3 M. i" l0 b
[2] MicrosoftVisual C++ 2008 SP1 in e:\Program Files\Microsoft Visual Studio 9.0
, o4 I+ J7 [" u1 ?" ~% U( w! J4 z3 B
[3] MicrosoftVisual C++ 6.0 in E:\Program Files\Microsoft Visual Studio
/ S7 {) b/ i& r) p4 G
[0] None
5 f# m0 t0 M2 o8 U, U% e+ O4 I
[1]matlab 自带的不能用 其他的如果有的话 就相应的选择就行
& U x; a% Y& I9 A" j D. e
我选择了 【2】
3 |, B; ~: v; J6 ~2 Y) S/ ?
step4:
$ t$ ]9 Q* }+ d$ d3 ]" O# j
Compiler: Microsoft Visual C++ 2008 SP1
( q1 ?9 @1 y! Y) k
Location:e:\Program Files\Microsoft Visual Studio 9.0
+ ?3 j; V% [, _4 m' ^
Are thesecorrect [y]/n? 路径是否正确 是的就选y
6 I0 O$ \7 C! A
如果没有自动检测出来依次的话step2就选【n】就可以,再顺着提示下来。
' {8 O5 A9 Y) B+ b# u3 q. _% o
Step 5
: `, n! B" i8 A4 v6 W( i
Make
- H/ E3 K7 q( {# e! E. R
后面就是:
* \. M7 g7 R, r( g. S3 B7 q% B! Z
load heart_scale.mat(此处无分号)
+ Y% F D* W) G5 ^! p. T
train = heart_scale_inst;
7 ]8 \; I$ A* G1 E9 Y
train_label=heart_scale_label;
, |% [( g; J/ H! W: @2 F8 y: R
test=train;
. j0 U5 _( _* h9 B% {# s
test_label=train_label;
$ ^) J. Z/ X% Q$ S9 ~; F
model=svmtrain(train_label,train,'-c 2 -g0.01');
1 C. n' v9 d, U$ O! J& u, U
[predict_label,accuracy]=svmpredict(test_label,test,model);
! x! r( ~% U. G: R u1 t$ L! W( Y
1
, c. _4 R6 c+ b+ o& D( S
make这一步报错
, ?* {/ R* |9 ]8 u0 T$ F
Error using mex (line 206)
3 R+ h. G0 K7 h* @. t a, L5 A
Unable to complete successfully.
; b- G) A1 |- i8 p* X
Error in make (line 1)
' _" a6 I' f7 i0 v7 a1 n
% This make.m is for MATLAB and OCTAVE
K5 o/ o; }& u% A
under Windows, Mac, and Unix
# d- o: t. B8 o2 Z4 E
在尝试了许多方法后,竟然是换了低版本的libsvm,搞定了~~~
% T% ~+ c3 k+ _! {! g+ y! w
. C" X; s! p( ?, T' J2 b
2 还有一个make这一步出现的错误3 Make时出错
3 b' S' \: Q* L& H1 N! S7 |+ w
Undefined function orvariable 'make'
4 ?! f% g4 w2 }/ |, y
解决方法为:
: n, M5 Y" m+ n5 {4 ]
设置matlab的path
$ |7 c; |4 z! l' N: V
方法file->set path->set subpath(为什么要sub path因为只有这样才能将你要加的文件目录的子文件都加进去,否则只是加了你所要加的那个目录。)
/ u6 K8 [, n# Q" }4 V
还要记得把current folder 设为matlab所在的路径
% q1 N2 O4 E) e$ P4 A$ f
3 输入load heart_scale.mat;报错
1 ^3 \3 n3 w x0 z# X2 Y- f, S* H2 i
Error using load
/ D7 i- E# p/ F3 W& S3 D
Unable to read file heart_scale.mat;: No
8 i a" s/ j8 r; e- g; M
such file or directory.
" U2 ~; k: r) y8 w+ \
这个问题是这样的,不应该有最后那个; 去掉分号就可以了。。。(粗心所致。。。不知道别人会不会像我这样。。。)
: q/ D: X; r2 D" A2 s/ ^
4
1 k V$ c+ c* p: ~5 U# X2 q
load 这一步报错
8 L& Z. ~3 K0 A3 Y& \4 T7 C1 M
??? Error using ==>load
! s. ?6 ^7 @0 p8 Y' c% D
Number of columns on line 2 of ASCII file D:\Program
# q& @% ~ M- j2 s$ c [5 i% M
Files\MATLAB2010\matlab\toolbox\libsvm-3.13\heart_scale
7 H6 h8 N& Y9 p- L/ A
must be the same as previous lines.
' E) c. z8 y9 O9 b
官方现在不给heart_scale.mat,给的都是VC++下的格式。一些旧版本的工具箱还可以找到mat文件,新版本都没有了。所以load会报错:heart_scalemust be same as previous lines)
7 W: p, w$ L0 ^! j
一种解决方法是:使用给的一个函数,转化数据。此函数为libsvmread()
! W1 V9 Z: H, R4 x3 p3 I8 [
使用如下: [label_vector, instance_matrix] =libsvmread('filename');
P0 F; ^+ d( A7 M3 b( D/ i, V9 C
此处为了跟官方统一名称可以[heart_scale_label,heart_scale_inst] =libsvmread('heart_scale');
I, f( u! B% M! p4 {
注意:由于heart_scale在libsvm-3.11目录下,不是在matlab下,所以直接用libsvmread命令会报错,要买改变当前路径,或者使用[heart_scale_label,heart_scale_inst]=libsvmread('../heart_scale');../代表返回上层路径。
1 v, T# u6 B* y6 V
但是最简单的方法是,找到旧版本工具箱的mat文件添加上即可!
/ F% Z$ N- P* }0 s0 B) p F+ W
6 r' l( z, _, p7 @, j
5 A' p+ }7 @, I% R1 l* r6 A& g
& Q; k: [& y% D6 o" X8 w2 N( d3 r
& ]+ u5 \2 ^* z/ H% I+ h# t
5 到svmtrain这一步报错
/ x% j! k: b9 B; }1 m
??? Errorusing ==>svmtrain at 172
. O+ \, f+ k) x) \5 y- u; v" E
Group mustbe a vector.
: x# g4 Z- ^% g! N# F. O: ~4 c. E# G
是因为在添加工具箱的时候没有添加完全,file-Set Path-Add with Subfold ...添加好路径就可以了
" \# E4 p1 Y) D3 w3 z
在使用过程中到目前只遇到这些错误~现在也只是会简单的用libsvm工具箱……
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5