【问题标题】:How to use CMake and Visual Studio 2010 (64 bit) to build a MATLAB R2011a (64 bit) mex file?如何使用 CMake 和 Visual Studio 2010(64 位)构建 MATLAB R2011a(64 位)mex 文件?
【发布时间】:2012-04-18 21:55:07
【问题描述】:

我想编写一个CMakeLists.txt,以便 CMake 编写一个 Visual Studio 2010(64 位)解决方案文件,以便从 C++ 代码 example.cxx 为 MATLAB R2011a(64 位)构建一个 mex 函数。

  1. 我不想使用 MATLAB 的编译器包装器 mex,而是设置 Visual Studio 解决方案文件,以便 Visual C++ 链接相关的 MATLAB 库。
  2. example.cxx 没有依赖项,除了 mex 文件所需的 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})

编译器和链接器都不会发出任何错误。我将输出 example.lib 安装在 MATLAB 路径中的目录下,名称为 example.mexw64。当我从 MATLAB 调用 example 时,我收到错误消息

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

欢迎提出任何建议!

【问题讨论】:

    标签: matlab visual-c++ 64-bit cmake mex


    【解决方案1】:

    我遇到了同样的问题,this link 非常有帮助(顺便说一句,这也是如何在 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(本示例中未显示)来解决此问题。

    【讨论】:

      【解决方案2】:

      Matlab mex 文件是 dll 不是库。尝试让 cmake(不是这方面的专家)创建一个动态的库,而不是静态的。

      【讨论】:

      • 我试过这个。现在我得到错误:Mex file entry point is missing. Please check the (case-sensitive) spelling of mexFunction (for C MEX-files), or the (case-insensitive) spelling of MEXFUNCTION (for FORTRAN MEX-files). ??? Invalid MEX-file 'C:\...\example.mexw64': C:\...\example.mexw64 is not a valid Win32 application.
      • 当我在 Visual Studio 解决方案文件中明确指定入口点时(如何让 CMake 以独立于平台的方式执行此操作?),我收到此错误消息:??? Invalid MEX-file 'C:\...\example.mexw64':跨度>
      • 你的dll需要导出函数mexFunction。也许它没有导出或拼写不正确。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多