数学建模社区-数学中国

标题: 求助:关于混合编程的错误,用mex编译就出现 - MATLAB 应用发布 [打印本页]

作者: 深叶子    时间: 2014-8-23 20:04
标题: 求助:关于混合编程的错误,用mex编译就出现 - MATLAB 应用发布
如何实现C语言与MATLAB接口,出现 E:\PROGRA~1\MATLAB\R2012\BIN\MEX.PL: Error: No file names given. .错误。
; V1 q% a  C* n3 }7 Y" g这该怎么解决啊?
6 f. ~8 J' Z: t》mex-setup8 j7 [9 C0 h# F
    Usage:
2 b- h0 G2 O# P/ A3 W3 c7 Y. N        MEX [option1 ... optionN] sourcefile1 [... sourcefileN] & p* C0 D4 p) F0 _
            [objectfile1 ... objectfileN] [libraryfile1 ... libraryfileN] * R1 `# k2 x( R- @4 @7 D: d

0 c4 m' a, y7 G9 P    Use the -help option for more information, or consult the MATLAB API Guide.
, H5 v8 C/ k+ v+ }7 v# G  x# m
7 f  t! D) F+ A9 B2 u   h6 V. T) L+ L' k
  E:\PROGRA~1\MATLAB\R2012\BIN\MEX.PL: Error: No file names given. # Y+ G* U1 Y3 U& C9 @4 w- Y! O# C0 V3 u

/ k+ {0 p: E0 Y, Y: M1 b+ eUndefined function or variable 'setup'.

作者: madio    时间: 2014-8-23 22:12
编译文件的时候后面要加上需要编译的文件的名字,貌似就是这个问题。Undefined function or variable 'setup'是不是mex后面没有加一个空格,你改成mex  -setup试试
作者: madio    时间: 2014-8-23 22:13
网上找到这个总结的不错,你可以借鉴!
. h; s6 M# P. m; j
: C, G& W& a: g  e% [  s在matlab上使用libsvm工具箱使用错误及解决方法汇总
$ p& L' ^8 @+ O' {7 Q. Q6 S首先附上使用过程
2 [* L% L8 Z; o* B9 i1 {step1: 输入>>mex -setup
% `$ T+ Q# e/ m- a2 _/ N   step2:3 P3 ?# r( v0 o. K. B$ W9 g
   Please choose yourcompiler for building external interface (MEX) files: 1 v# h0 E. i2 ?7 |; G4 e% A) H
   Would you like mex to locate installed compilers [y]/n?        是否让matlab自动检测编译器可以选y4 Y* ^# Y) X% O3 `8 g2 S
  step3:; n6 g0 ~  r. o2 f
   Select a compiler:% c, A* C, k0 z9 J* A
0 t, E: `9 ?1 a9 J9 r- z

$ v: ]8 }' T% [+ u& j) t) z/ T' Y     [1] Lcc-win32 C2.4.1 in E:\PROGRA~1\MATLAB\R2010a\sys\lcc
3 X; a( Y; l8 O/ n, E     [2] MicrosoftVisual C++ 2008 SP1 in e:\Program Files\Microsoft Visual Studio 9.0 3 {! ~2 O( I3 o  Z
     [3] MicrosoftVisual C++ 6.0 in E:\Program Files\Microsoft Visual Studio - ~  B* H0 G: W4 O% t  v4 A
     [0] None ! I, t- T/ _4 [# f! p1 E7 ]
     [1]matlab 自带的不能用 其他的如果有的话 就相应的选择就行  
4 O8 H) J  P) |     我选择了 【2】2 ~2 H& O! E6 J$ I
    step4:8 I8 h* O) u# z% ~* M# ?
     Compiler: Microsoft Visual C++ 2008 SP1  
  W1 |8 X! I3 C      Location:e:\Program Files\Microsoft Visual Studio 9.0 8 Y% @8 ^0 a- c, y1 a
      Are thesecorrect [y]/n?  路径是否正确 是的就选y " \, d5 c- B0 x# i
      如果没有自动检测出来依次的话step2就选【n】就可以,再顺着提示下来。
# e5 p) X( F; fStep 5   ' g* s0 U4 Y6 G1 u+ T- `* H
Make- |: A$ p5 n3 W  C% [; K( F2 K7 M
后面就是:
- U  S2 d$ i3 I* W+ u( o% Qload heart_scale.mat(此处无分号)( `! {% D. d3 @; ]7 V
train = heart_scale_inst;
4 r3 ^4 ]/ |% s* D  Btrain_label=heart_scale_label;* u; b' Y$ l4 a% n0 ~1 B3 c
test=train;
2 C4 J/ q$ R! ~9 @' q  C- Y* etest_label=train_label;- X* t" ?3 K# {8 `
model=svmtrain(train_label,train,'-c 2 -g0.01');1 Y5 b! l$ @% |+ M* b- o
[predict_label,accuracy]=svmpredict(test_label,test,model);
3 {' S+ V8 `+ [* c8 ~& y. \( x1  s3 v1 u, _: y% v
make这一步报错
: i' Q% B9 l, j* m# n* O& lError using mex (line 206)
2 H. x5 B1 e1 m2 n# s# DUnable to complete successfully.3 }/ N6 d% y9 y( ^
Error in make (line 1)2 f: B% O, p3 q  P/ @" ^9 g
% This make.m is for MATLAB and OCTAVE$ g3 C& O+ A8 C# T8 Y
under Windows, Mac, and Unix' b) W8 _  {7 s
在尝试了许多方法后,竟然是换了低版本的libsvm,搞定了~~~. O) P1 S. g! P" ~' G
! u# ^1 k2 ^2 u6 Q
2 还有一个make这一步出现的错误3 Make时出错) W* e% N# ~1 ~0 ~8 E* P6 p
Undefined function orvariable 'make'% d1 |/ h: L* W' J
解决方法为:
1 C3 i! Q; ~( h$ S& l: [设置matlab的path
6 _* i* X$ F! J# B" R   方法file->set path->set subpath(为什么要sub path因为只有这样才能将你要加的文件目录的子文件都加进去,否则只是加了你所要加的那个目录。)
8 c% E' t) ?$ V" ]- V还要记得把current folder 设为matlab所在的路径; B  y- \9 }+ _! J, [
3 输入load heart_scale.mat;报错
6 l5 L7 l' ]/ I" I6 a' qError using load
5 F* A6 v( W3 n: K  L$ L- jUnable to read file heart_scale.mat;: No  t( e' f# u8 o) [8 K% F3 y# f
such file or directory.
7 F; Z2 o8 {/ e: ]; }. @; S这个问题是这样的,不应该有最后那个;   去掉分号就可以了。。。(粗心所致。。。不知道别人会不会像我这样。。。)/ z5 c3 M$ r9 O( s: c+ J# Y: w& u: K
4" F# d/ V8 O$ ]5 }8 m$ Z" t
load 这一步报错
- e+ B# _+ B2 ~2 Z9 {??? Error using ==>load
% D6 [  Z: x3 U4 m0 \Number of columns on line 2 of ASCII file D:\Program
! z, i  E7 y2 m" m$ GFiles\MATLAB2010\matlab\toolbox\libsvm-3.13\heart_scale2 j* j  Y  ~% G6 X" Z' {% u, c) P
must be the same as previous lines.
) C( d$ d, v$ L9 I' L4 A官方现在不给heart_scale.mat,给的都是VC++下的格式。一些旧版本的工具箱还可以找到mat文件,新版本都没有了。所以load会报错:heart_scalemust be same as previous lines)
0 p: y" H9 Z. z9 j6 E! d一种解决方法是:使用给的一个函数,转化数据。此函数为libsvmread(); {7 ?% E, d- y8 X  o) w
使用如下: [label_vector, instance_matrix] =libsvmread('filename');8 W' ]. ^, E6 }9 L0 @/ {
此处为了跟官方统一名称可以[heart_scale_label,heart_scale_inst] =libsvmread('heart_scale');
$ J: c' l# W' w注意:由于heart_scale在libsvm-3.11目录下,不是在matlab下,所以直接用libsvmread命令会报错,要买改变当前路径,或者使用[heart_scale_label,heart_scale_inst]=libsvmread('../heart_scale');../代表返回上层路径。; X* o- q0 j# Z4 b( H& J8 T0 e5 Y8 A9 H- |
但是最简单的方法是,找到旧版本工具箱的mat文件添加上即可!
! d2 E2 Q: s2 H0 \1 _( r
' B7 y2 L. |% j4 v7 I. ?2 }0 E" ]6 q- ^- T1 Q% c

- J4 }7 f! W, |
5 n: T$ b( A8 h6 @2 I2 P! F5 到svmtrain这一步报错
7 q6 j  {# f% w. o??? Errorusing ==>svmtrain at 1729 i3 ~, T  ^' |1 y6 u8 d: J1 B* _
Group mustbe a vector.
9 P, M7 ?6 g( S是因为在添加工具箱的时候没有添加完全,file-Set Path-Add with Subfold ...添加好路径就可以了
* G+ _6 m! S3 j& v) L- y2 |在使用过程中到目前只遇到这些错误~现在也只是会简单的用libsvm工具箱……




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5