2012-04-18 68 views
2

我想寫一個CMakeLists.txt這樣CMake寫一個Visual Studio 2010(64位)解決方案文件來爲C++代碼example.cxx構建MATLAB R2011a(64位)的mex函數。如何使用CMake和Visual Studio 2010(64位)構建MATLAB R2011a(64位)mex文件?

  1. 我不想使用MATLAB的編譯器包裝mex但設置了Visual Studio解決方案文件,使之VISUAL C++鏈接相關的MATLAB庫。
  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.mexw64下將輸出example.lib安裝在MATLAB路徑的目錄中。當我從MATLAB調用example時,出現錯誤信息

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

歡迎任何建議!

回答

0

Matlab mex文件是dll的不是庫。嘗試製作cmake(不是專家)創建一個動態的librart,而不是靜態的。

+0

我試過了。現在我得到錯誤:'Mex文件入口點丟失。請檢查MEXFUNCTION(for FORTRAN MEX文件)的mexFunction(用於C MEX文件)或(不區分大小寫) 拼寫的(區分大小寫) 拼寫。 ???無效的MEX文件 'C:\ ... \ example.mexw64': C:\ ... \ example.mexw64不是有效的Win32 應用程序。' – 2012-04-18 22:17:01

+0

當我在Visual Studio中顯式指定入口點時解決方案文件(如何讓CMake以獨立於平臺的方式執行此操作?),我收到以下錯誤消息:無效的MEX文件 'C:\ ... \ example.mexw64':' – 2012-04-18 22:24:49

+0

你的DLL需要導出函數mexFunction。也許它不會被導出或拼寫不正確。 – 2012-04-18 22:55:04

2

我有同樣的問題,並this link是非常有用的(也作爲一個很好的例子,如何在MATLAB MEX文件btw中使用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中來避開它(本例中未顯示)。

相關問題