2012-04-18 14 views
2

CMakeがC++コードexample.cxxからMATLAB R2011a(64ビット)のmex関数をビルドするためにVisual Studio 2010(64ビット)ソリューションファイルを書き込むようにCMakeLists.txtを書きたいと思います。CMakeとVisual Studio 2010(64ビット)を使用してMATLAB R2011a(64ビット)mexファイルを構築する方法は?

  1. 私はMATLABのコンパイララッパーmexを使用したいが、そのような関連するMATLABライブラリをリンクする++のVisual CというVisual Studioのソリューションファイルを設定しないでください。
  2. example.cxxは、mexファイルに必要なMATLABライブラリを除き、依存関係はありません。
  3. CMakeの2.8.7は、それは、Visual Studio用の64ビット・ジェネレータを使用していることなどに正しく設定されている2010年

私が今やっていることの本質は

find_package(Matlab) 
add_library(example STATIC example.cxx) 
target_link_libraries(example ${MATLAB_LIBRARIES}) 

どちらのコンパイラですリンカがエラーを発行することもありません。出力example.libexample.mexw64の名前でMATLABのパスにあるディレクトリにインストールします。私はMATLABからexampleを呼び出すと、私は、任意の提案は歓迎されているエラーメッセージ

??? Invalid MEX-file 
'C:\...\example.mexw64': 
C:\...\example.mexw64 is not a valid Win32 application. 

を入手します!

答えて

0

MatlabのmexファイルはDLLではありません。 cmake(それについての専門家ではない)に静的ではなく動的なライブラリを作成させるようにしてください。

+0

私はこれを試しました。今私はエラーが表示されます: 'Mexファイルエントリポイントがありません。 mexFunctionのスペル(CのMEXファイルの場合) のスペル、またはMEXFUNCTION(FORTRAN MEXファイルの場合) のスペル(大文字と小文字を区別しない)を確認してください。 ???無効なMEXファイル 'C:\ ... \ example.mexw64': C:\ ... \ example.mexw64は有効なWin32 アプリケーションではありません。 –

+0

Visual Studioでエントリポイントを明示的に指定するとソリューションファイル(プラットフォームに依存しない方法でCMakeにどのようにしてもらうにはどうすればいいですか?)、私はこのエラーメッセージを受け取ります: '???無効なMEX-ファイル 'C:\ ... \ example.mexw64': ' –

+0

あなたのdllの関数でmexFunctionをエクスポートする必要があります。おそらくエクスポートされていないか、正しく入力されていない可能性があります。 –

2

私は同じ問題があり、this linkは非常に役に立ちました(また、ITKをMATLAB MEXファイルbtwに使用する方法の良い例として役立ちます)。あなたのケースでは、CMakeLists.txtファイルにリンクフラグ"/export:mexFunction"を追加する必要があります。以下の例:FIND_PACKAGE(Matlab)は、それは一部の人のための問題かもしれので、すべてがうまく動作するようには思えないことを

PROJECT(example) 
FIND_PACKAGE(Matlab REQUIRED) 

INCLUDE_DIRECTORIES(${MATLAB_INCLUDE_DIR}) 

ADD_LIBRARY(example MODULE example.cpp) 
ADD_DEFINITIONS(-DMATLAB_MEX_FILE) 

# Needed for entry point. 
SET_TARGET_PROPERTIES(example 
PROPERTIES 
LINK_FLAGS "/export:mexFunction" 
) 

# Change the dll extension to a mex extension. 
set_target_properties(example PROPERTIES SUFFIX ".mexw64") 

TARGET_LINK_LIBRARIES(example ${MATLAB_LIBRARIES}) 

注意。 MATLABのパスをCMakeLists.txtにハードコーディングして回避する必要がありました(この例では示されていません)。

関連する問題