、私はこれは はすでにちょうどFYI、答えられなければならないと信じています。あなたはファイルをコンパイルしているようですが、 はMATLAB以外のソースではありませんが、それは にもっと詳しい情報を与える必要があります。 features.ccファイルは のシンボルround
を参照しているため、エラーが発生しているようです。関数のライブラリを提供するには が必要です。または、ソースからコンパイルする必要があります。 をhelp mex
にすると、ライブラリリンカに関する情報( )は、パスの場合は-L
、ライブラリの場合は-l
になります。 この機能は広告されたとおりに機能せず、 -lC:/path/to/library/libfile.lib
などを使用する必要があることを覚えているようです。まず、 のMatlabヘルプのyprime
の例をコンパイルすることをお勧めします。これにより、 コンパイラが正しくセットアップされていることを確認できます。また、 を取って、yprime.cファイルとmexFunction
を見てください。 コンパイラが.cc
ファイルをCファイルとして受け入れることを確認したい場合があります。それはC++ ファイルと解釈され、頭痛が増えます。あなたは、yprime.c
ファイル 〜yprime.cc
の名前をちょうどそのアイデアをテストするために変更することができます。
編集 コードをご提供いただきありがとうございます。これはケーキ私の友人、完全なケーキする必要があります。 :-)
これは、私が使用してコンパイルしようとすると、私は得る私のエラーです:
Microsoft Visual C++ 2008 Express
>> mex -v -g features.c
This is mex, Copyright 1984-2007 The MathWorks, Inc.
-> Default options filename found in C:\Documents and Settings\wynkocl\Application\Data\MathWorks\MATLAB\R2009b
----------------------------------------------------------------
-> Options file = C:\Documents and Settings\wynkocl\Application Data\MathWorks\MATLAB\R2009b\mexopts.bat
MATLAB = C:\MATLAB\R2009B~1
-> COMPILER = cl
-> Compiler flags:
COMPFLAGS = /c /Zp8 /GR /W3 /EHs /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /nologo /MD
OPTIMFLAGS = /O2 /Oy- /DNDEBUG
DEBUGFLAGS = /Z7
arguments =
Name switch = /Fo
-> Pre-linking commands =
-> LINKER = link
-> Link directives:
LINKFLAGS = /dll /export:mexFunction /LIBPATH:"C:\MATLAB\R2009B~1\extern\lib\win32\microsoft" libmx.lib libmex.lib libmat.lib /MACHINE:X86 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /incremental:NO /implib:"C:\DOCUME~1\WYNKOCL\LOCALS~1\TEMP\MEX_7L~1\templib.x" /MAP:"features.mexw32.map"
LINKDEBUGFLAGS = /DEBUG /PDB:"features.mexw32.pdb"
LINKFLAGSPOST =
Name directive = /out:"features.mexw32"
File link directive =
Lib. link directive =
Rsp file indicator = @
-> Resource Compiler = rc /fo "mexversion.res"
-> Resource Linker =
----------------------------------------------------------------
--> cl /c /Zp8 /GR /W3 /EHs /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /nologo /MD /FoC:\DOCUME~1\WYNKOCL\LOCALS~1\TEMP\MEX_7L~1\features.obj -IC:\MATLAB\R2009B~1\extern\include -IC:\MATLAB\R2009B~1\simulink\include /Z7 -DMX_COMPAT_32 features.c
features.c
features.c(27) : error C2059: syntax error : 'type'
features.c(28) : error C2059: syntax error : 'type'
features.c(92) : warning C4013: 'round' undefined; assuming extern returning int
C:\MATLAB\R2009B~1\BIN\MEX.PL: Error: Compile of 'features.c' failed.
ああ...今、私たちは問題を見つけることができます。まず、C2059のエラーは、関数max
が再定義されているという事実にあります。その後、round
関数にプロトタイプはありません。うーん、それは奇妙です。
int round(double number)
{
return (number >= 0) ? (int)(number + 0.5) : (int)(number - 0.5);
}
今ではコンパイル:round
はそうあなたがそうのようなあなたのファイルの先頭に似implement oneする必要がありますmath.h
ではないのでまあ、それはです!ヒントとして、より詳細なデバッグメッセージを得るためにビルドするときにmex -v -g
を試すこともできます。これがあなたの道に迷惑をかけないように!
は、ここで私がここに持っているものの最後です:
- 再ダウンロードVOC-release4.01.tgz
- エキスとは、すべての
.cc
ファイルに.cpp
ファイルの名前を変更します。
オープンcompile.m
スクリプトなどのように変更します。
MEX -v -g resize.cpp MEX -v -g dt.cpp MEX -v -g機能。CPP MEX -v -g getdetections.cpp
%使用 %0が最速で、あなたの設定に応じて、次のいずれか、3は最も遅いです
% 0)マルチスレッドのコンボリューションSSE %のMEXは-v使用して - グラムfconvsse.cpp -o FCONV
% 1)マルチスレッドのコンボリューションBLAS %警告使用:BLASバージョンMathWorks社のMATLABでは動作しません> = 2010B %とIntelのCPUの %MEX -O fconvblasMT.cpp -lmwblas -oをfconv
LIB \ \ MATLAB \ R2009bSP1 \のEXTERN:% 2)BLAS MEX -g -v fconvblas.cpp -LCを用いBLAS %MEX -O fconvMT.cpp -o FCONV
% 3)畳み込みなし畳み込みをmulththreaded \ FCONV
% 4)基本的なコンボリューション、非常に互換性 %-outputマイクロソフト-lmwblas \ win32のは、MEX -O fconv.cpp -o FCONV私はオプション3での滞在をお勧めします
は、pthreadsのはただそうですこの時点であなたにはあまりにも多くのことがあります。 :-)
- resize.cpp
は の#define BZERO追加(bは、LEN)(memsetの((b)は、 '\ 0'、(LEN))、(無効)0) int round(double number) { return(number> = 0)? (int)(number + 0.5):(int)(number - 0.5);上部の }と変化:
alphainfo ofs[len];
alphainfo * ofs = (alphainfo *)mxMalloc(len);
と
assert(sy-1 >= 0);
にアサート
に(SY1> = 0)。 関数の最後に
mxFree(ofs);
を忘れないでください。
- dt.cpp:
int32_t
をint32_T
に変更してください。
features.cpp
int型のラウンド(ダブルナンバー) { リターン(数> = 0)を追加しますか? (int)(number + 0.5):(int)(number - 0.5); }
- ディレクトリ
C:\MATLAB\R2009bSP1\extern\lib\win32\microsoft
があることを確認してください。そこにMatlabリリースexternライブラリディレクトリを置いていなければなりません。
お楽しみください。
どのmexコンパイラを使用していますか? 'mex -setup'を参照してください。 – Nzbuu
私はこの命令で2つのコンパイラを試しました。 "mex -setup" matlabに含まれているものとVisual C++ 最初のファイルはいくつかのファイルで実行されますが、2番目のファイルはこれらのファイル、.hファイル致命的なエラー – SafeY