2

CMakeLists.txtCMake が Visual Studio 2010 (64 ビット) ソリューション ファイルを記述して、C++ コードから MATLAB R2011a (64 ビット) 用の mex 関数をビルドするようなものを書きたいと思いますexample.cxx

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

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

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

コンパイラもリンカもエラーを発行しません。MATLAB のパス内のディレクトリにexample.libある名前で出力をインストールします。MATLAB からexample.mexw64呼び出すと、エラー メッセージが表示されますexample

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

どんな提案も大歓迎です!

4

2 に答える 2

3

私は同じ問題を抱えていましたが、このリンクは非常に役に立ちました (MATLAB MEX ファイルでITKを使用する方法の良い例としても役立ちます)。あなたの場合、リンクフラグ"/export:mexFunction"CMakeLists.txtファイルに追加する必要があると思います。以下の例:

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})

FIND_PACKAGE(Matlab)はうまく機能していないように見えるので、一部の人にとっては問題になる可能性があることに注意してください。この問題を回避するには、MATLAB パスを CMakeLists.txt にハードコーディングする必要がありました (この例には示されていません)。

于 2012-06-19T05:57:39.970 に答える
0

Matlab mex ファイルはライブラリではなく dll です。cmake(その専門家ではない)を作成して、静的ではなく動的librartを作成してみてください。

于 2012-04-18T22:10:40.667 に答える