1

edfImport という関数を使用しようとしています (ここで入手可能: http://kobi.nat.uni-magdeburg.de/edfImport )

この関数を使用するには、まず edfCompile (ツールキットに含まれています) を実行する必要があります。edfCompile を実行すると、次のエラーが発生します。

??? Error using ==> mex
Unable to complete successfully

私は MATLAB 7.1 (R14) を実行しており、コンパイラ用に最新バージョンの MinGW、Cygwin、および Gnumex をセットアップしています (このページの指示に従って: http://ptolemy.eecs.berkeley.edu/ptolemyII/ptII4.0/ cygwin.htm )

サンプルの mex ファイルをコンパイルすることはできますが、これがコンパイラのセットアップ方法の問題ではないという確信はまだありません。感謝して受け取ったヒント。他にも edfCompile の実行に問題があるかどうかを知っておくとよいでしょう... (http://kobi.nat.uni-magdeburg.de/edfImport)

どうもありがとう

編集:完全なエラーメッセージ:

In file included from edfMexImport.cpp:6:0: 
EDFFile2.h:37:39: error: 'mwSize' has not been declared 
EDFFile2.h:127:45: error: 'mwIndex' has not been declared 
edfMexImport.cpp: In function 'void mexFunction(int, mxArray**, int, const mxArray**)': 
edfMexImport.cpp:12:3: error: 'mwSize' was not declared in this scope 
edfMexImport.cpp:12:10: error: expected ';' before 'OutputDims' 
edfMexImport.cpp:48:12: error: expected ';' before 'OptionsDimN' 
edfMexImport.cpp:49:9: error: 'OptionsDimN' was not declared in this scope 
edfMexImport.cpp:51:13: error: 'OptionsDim' was not declared in this scope 
edfMexImport.cpp:51:33: error: expected primary-expression before ')' token 
edfMexImport.cpp:51:34: error: expected ';' before 'mxGetDimensions' 
edfMexImport.cpp:73:12: error: expected ';' before 'FlagsDimN' 
edfMexImport.cpp:74:9: error: 'FlagsDimN' was not declared in this scope 
edfMexImport.cpp:76:13: error: 'FlagsDim' was not declared in this scope 
edfMexImport.cpp:76:31: error: expected primary-expression before ')' token 
edfMexImport.cpp:76:32: error: expected ';' before 'mxGetDimensions' 

C:\PROGRAM FILES\MATLAB71\BIN\MEX.PL: Error: Compile of 'edfMexImport.cpp' failed. 

??? Error using ==> mex
Unable to complete successfully

Error in ==> edfCompile at 15
eval(sprintf('mex -I''%s'' edfMexImport.cpp EDFFILE2.cpp ''%s/edfapi.lib''', edfapiIncludesFolder, edfapiLibraryFolder));
4

3 に答える 3

2

It looks like some type definitions are missing, particularly the mwSize and mwIndex type. Can you add the following to EDFFile2.h and try again?

just below

#include "edf.h"
#include <mex.h>

add this:

#ifndef mwSize
    #define mwSize int
#endif

#ifndef mwIndex
    #define mwIndex int
#endif
于 2012-05-21T12:57:31.153 に答える
1

MEX ファイルは、このドキュメントで説明されているように、64 ビットの「ラージ配列処理 API」をサポートするように変更されています。

http://www.mathworks.com/support/solutions/en/data/1-5C27B9/

このオプションの大きな変数のサポートは、R7.3 (2006b) で最初に追加されたものであり、バージョンはさらに古いことに注意してください。基本的に、MATLAB は MEX ファイルで使用される API に対して古すぎます。とはいえ、MEX ファイルが十分に単純であれば、Gunther のソリューションは、MEX ファイルを古い MATLAB に「バックポート」するための単純な答えかもしれません。mxGetDimensions() などの関数は mwSize* を返すようになりましたが、以前は int* を返していました。

可能であればMATLABをアップグレードしてください。それ以外の場合は、Guntherの答えを試して、どうなるか教えてください。

于 2012-05-21T13:18:19.170 に答える
0

edfCompile.m の中を見たことがありますか? edfMexImport.cpp残念ながら、私の PC には Matlab がインストールされていないため、2 つの .cpp ファイルをEDFFILE2.cpp手動でコンパイルしてみることをお勧めします。edfapi.lib

于 2012-05-18T18:30:29.660 に答える