matlab - 如何使用 CMake 和 Visual Studio 2010(64 位)构建 MATLAB R2011a(64 位)mex 文件?

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

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

  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.

欢迎任何建议!

最佳答案

我遇到了同样的问题,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 中来解决这个问题(本例中未显示)。

关于matlab - 如何使用 CMake 和 Visual Studio 2010(64 位)构建 MATLAB R2011a(64 位)mex 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10218626/

相关文章:

c++ - 一个类可以有多个虚表吗?

.net - 从 x64 .NET 访问 x86 COM

algorithm - 如何在 Matlab 代码中为旅行商问题实现轮盘选择和排名选择?

java - 如何将 Java 对象中的事件通知给 MATLAB 对象?

c++ - 如何测量代码大小?

从 C++ 托管 dll 抛出的 C# 异常 - EEFileLoadException * __ptr64

c# - PostMessage 参数从 32 位 C# 到 64 位 C++

matlab - 检查类的空实例

Matlab:如何对两个等效结构的字段求和?

c++ - 使用预处理器指令定义命令行选项