如何在Win64 MATLAB下编译随Linux makefile提供的基于ANSI C99的MEX代码?

时间:2014-09-02 07:35:11

标签: c windows matlab makefile mex

由于我对Linux系统缺乏了解,似乎我在这里遇到了一个真正的问题: 我已经下载了一些开源代码,

  • 是用C

  • 编写的
  • 使用complex.h,所以我认为它是ANSI C99

  • 附带为在Linux系统下编译而设计的makefile

  • 提供IDL,MATLAB,Python等接口。

我确实熟悉在基于Windows的MATLAB环境下编译C / MEX文件,但在这种情况下,我甚至不知道从哪里开始。该项目分布在几个文件夹中,包含许多源文件和头文件。首先,我用来编译MEX文件的Visual Studio 2010编译器直到现在都不符合C99标准,即它不能识别complex.h标题。

任何有关编制此项目的帮助都将受到高度赞赏。特别是,我有以下问题: 1)是否有可能从MEX文件中自动提取编译信息并将其传输到Windows实际? 2)是否有任何免费的编译器能够编译C99的东西,这也很容易嵌入到MATLAB中?

2 个答案:

答案 0 :(得分:1)

我已经完成了这项工作(将内部遗留代码inc.mex文件移至Win64)。我无法推荐这种体验。

  1. 你必须重新编译,不能绕过它。
  2. 支持mex depend on your MATLAB version
  3. 的编译器
  4. This使用Pelles C的文件交换条目可能是一个起点(如果它适用于您的MATLAB版本)。
  5. 我猜测有一个主makefile然后通过子目录中的makefile工作 - 读完Linux下的编译说明,它会让你知道发生了什么,也可以讨论做什么如果你想改变编译器。一旦找到兼容的编译器,下一步就是了解makefile正在做什么并相应地编辑它们(更改路径,编译器,编译器标志等)。

    然后,从记忆中(不久前),你可以通过越来越模糊的编译错误享受神奇的神秘之旅。记录所有内容,因为如果你确实这样做了,那么你就不会有两次这样做了。

答案 1 :(得分:1)

Windows上的MATLAB R2016b现在支持MinGW编译器。我成功地使用它来编译主要为Linux / gcc编写的代码。我在MATLAB的Add-On菜单中安装了这个(搜索MinGW)。

就我而言,我正在使用遗留代码工具构建。我需要做的与正常情况不同的是告诉编译器通过编译器标志支持c99。这就是诀窍:

legacy_code('compile', def, {'CFLAGS=-std=c99'})

我很难得到旗帜命令(我有一些额外的引号显然已经破坏了东西),并问了The MathWorks,所以归功于他们的支持团队。

如果您使用mex,我希望能做一些非常相似的事情。

我猜想makefile与你的应用程序无关;你需要告诉mexlegacy_code函数有关构建整个应用程序所需的所有文件或链接预构建的库(听起来你没有)。

我希望这有帮助!