数学建模社区-数学中国

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

作者: 深叶子    时间: 2014-8-23 20:04
标题: 求助:关于混合编程的错误,用mex编译就出现 - MATLAB 应用发布
如何实现C语言与MATLAB接口,出现 E:\PROGRA~1\MATLAB\R2012\BIN\MEX.PL: Error: No file names given. .错误。, G/ P4 D9 @. Q& R& D/ i
这该怎么解决啊?
9 W* P/ T1 |6 B* s) ?/ {》mex-setup
, M7 g9 N/ T/ @1 n    Usage: 3 h: j6 j" D! o
        MEX [option1 ... optionN] sourcefile1 [... sourcefileN]
  l, t% f9 K" T3 w( j            [objectfile1 ... objectfileN] [libraryfile1 ... libraryfileN] 4 T4 q/ g+ W7 E2 D0 A

  L! |( q2 [' m* j    Use the -help option for more information, or consult the MATLAB API Guide. 0 T% {. O3 ~8 x& k
: c; v  m# M9 f6 ~* I) Y! U
9 C* b, m- y+ b! g0 C' S
  E:\PROGRA~1\MATLAB\R2012\BIN\MEX.PL: Error: No file names given.
6 m* u& z. m+ I% F
, ]$ S. q$ o7 T4 o9 rUndefined function or variable 'setup'.

作者: madio    时间: 2014-8-23 22:12
编译文件的时候后面要加上需要编译的文件的名字,貌似就是这个问题。Undefined function or variable 'setup'是不是mex后面没有加一个空格,你改成mex  -setup试试
作者: madio    时间: 2014-8-23 22:13
网上找到这个总结的不错,你可以借鉴!
; a, t$ }% ]2 A3 |, L; I. |0 {5 l
在matlab上使用libsvm工具箱使用错误及解决方法汇总
  H, k! z7 G# p0 Q. b首先附上使用过程$ E9 G, K2 p+ g
step1: 输入>>mex -setup
; O: B2 {' m& |. }1 z" @+ n9 \9 w   step2:
9 y/ W7 [8 n. |: A& g; n# H   Please choose yourcompiler for building external interface (MEX) files:
  x/ ^- w' I2 M, J   Would you like mex to locate installed compilers [y]/n?        是否让matlab自动检测编译器可以选y# s' d, M% k, X% z/ U
  step3:3 ~1 W1 C( x( A/ _6 @. m
   Select a compiler:
. q) ~; o' c: Z  I4 s/ C% I9 }( z1 v3 W

$ ~0 {! [- ^- Y     [1] Lcc-win32 C2.4.1 in E:\PROGRA~1\MATLAB\R2010a\sys\lcc * o  d7 L) K% }" u
     [2] MicrosoftVisual C++ 2008 SP1 in e:\Program Files\Microsoft Visual Studio 9.0
( S1 l' |3 ?+ L) x+ X     [3] MicrosoftVisual C++ 6.0 in E:\Program Files\Microsoft Visual Studio
7 D7 |: C9 y+ R( Z5 R1 ]; Q* V$ `     [0] None 4 {) b8 b# }" x7 ~
     [1]matlab 自带的不能用 其他的如果有的话 就相应的选择就行  
0 u0 o5 b+ \" z/ P     我选择了 【2】! B* _2 D* s2 V5 h5 w
    step4:
9 H' J+ D% E# [! w2 P& S; E( q; K     Compiler: Microsoft Visual C++ 2008 SP1  
* g( I: Y: |+ c/ k# F' `0 J      Location:e:\Program Files\Microsoft Visual Studio 9.0
% a  n, B% v8 b/ B0 [      Are thesecorrect [y]/n?  路径是否正确 是的就选y
' w! @, k% B% R% U: p/ d' f      如果没有自动检测出来依次的话step2就选【n】就可以,再顺着提示下来。
3 o7 }2 t# _# X4 MStep 5   
2 `6 W8 r8 B  e) n: C4 bMake9 x' j8 n( p1 B( w
后面就是:
; N2 x$ e  y8 x& T) z8 j7 Vload heart_scale.mat(此处无分号); W8 N& B8 B  d' K$ R; e' _- ~2 [
train = heart_scale_inst;8 j" p( P4 A7 ^! H
train_label=heart_scale_label;
- J; T( B/ U& k; \3 \, {test=train;/ i0 t  v# i' A  z2 i) j# C$ ^
test_label=train_label;
2 b' C0 {. `4 [! t4 `: F7 Kmodel=svmtrain(train_label,train,'-c 2 -g0.01');8 g/ e+ c% ?; v; P3 N* ^8 e8 Y
[predict_label,accuracy]=svmpredict(test_label,test,model);
% m8 `: v. G  D5 I, t2 g0 h1; i' v: E/ C6 W
make这一步报错
# Q% p3 k% S" z" t; `6 iError using mex (line 206)
, n$ C- _4 T! L" IUnable to complete successfully." y& U# C* f8 \+ X! P" S
Error in make (line 1)
+ p! @7 ]6 C8 `! k; p9 {% This make.m is for MATLAB and OCTAVE
! {$ L. N9 E7 L; q4 s9 [under Windows, Mac, and Unix4 i( |" l$ g; b
在尝试了许多方法后,竟然是换了低版本的libsvm,搞定了~~~4 v! ]- i1 Z6 K# ~; I# z+ p
& G6 d( [. s+ S7 r# r7 Y. j6 x
2 还有一个make这一步出现的错误3 Make时出错6 o( G9 K/ j/ L
Undefined function orvariable 'make'$ ]- Z, W, E$ _
解决方法为:
  ?: |& Y" t3 m2 @3 t设置matlab的path 7 q$ p1 w% E0 i" h! a# ^
   方法file->set path->set subpath(为什么要sub path因为只有这样才能将你要加的文件目录的子文件都加进去,否则只是加了你所要加的那个目录。)
- h( T: H) W/ N9 {3 _5 }还要记得把current folder 设为matlab所在的路径( M9 ]& r0 G( v* s
3 输入load heart_scale.mat;报错( r, j% U0 {( _2 G, z6 I) t
Error using load
3 }6 F* X) E* z! U4 P" g5 [7 MUnable to read file heart_scale.mat;: No  Y5 @( c( X: z) d2 V4 V& F/ R1 s
such file or directory.7 H5 ~5 b+ c. l) n+ Z
这个问题是这样的,不应该有最后那个;   去掉分号就可以了。。。(粗心所致。。。不知道别人会不会像我这样。。。)6 x7 L! \2 R. H. c7 E' o
43 X- a5 @4 P8 `
load 这一步报错' S# B) {( X4 {
??? Error using ==>load1 O, w) K( n% m' e
Number of columns on line 2 of ASCII file D:\Program2 C7 O7 G5 S6 s3 d; W+ x, r
Files\MATLAB2010\matlab\toolbox\libsvm-3.13\heart_scale/ h: `6 V4 P, E: E8 m8 S
must be the same as previous lines.. S$ U: o( ^. p9 _: a, \! i
官方现在不给heart_scale.mat,给的都是VC++下的格式。一些旧版本的工具箱还可以找到mat文件,新版本都没有了。所以load会报错:heart_scalemust be same as previous lines)
( U( g' E0 Y( c6 T! ?9 \& a4 F一种解决方法是:使用给的一个函数,转化数据。此函数为libsvmread()1 v2 m9 P4 u' m* ]/ K
使用如下: [label_vector, instance_matrix] =libsvmread('filename');3 v# t% U* K) D. U' B3 }8 y
此处为了跟官方统一名称可以[heart_scale_label,heart_scale_inst] =libsvmread('heart_scale');% g8 v" Y2 C/ Y8 O! I
注意:由于heart_scale在libsvm-3.11目录下,不是在matlab下,所以直接用libsvmread命令会报错,要买改变当前路径,或者使用[heart_scale_label,heart_scale_inst]=libsvmread('../heart_scale');../代表返回上层路径。. C6 k: T8 Z' G9 W
但是最简单的方法是,找到旧版本工具箱的mat文件添加上即可!7 z0 `" s, C3 Y% h7 q
) ^  b6 h" t5 }2 e. Y

, @: L0 ]- m% y' i) y- o9 V/ ~" y5 l. x" {/ t1 o
+ I0 C- Q' P  Q
5 到svmtrain这一步报错
7 E" _+ l" x  B??? Errorusing ==>svmtrain at 1723 G' Y" B$ H& N1 U% r. a
Group mustbe a vector." x3 s0 ~  S9 ^1 |0 P+ ?* u: A
是因为在添加工具箱的时候没有添加完全,file-Set Path-Add with Subfold ...添加好路径就可以了# |8 H9 v1 n4 R: B4 Y
在使用过程中到目前只遇到这些错误~现在也只是会简单的用libsvm工具箱……




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