如何在Win64 MATLAB下编译Linux makefiles附带的基于ANSI C99的MEX代码?

如何在Win64 MATLAB下编译Linux makefiles附带的基于ANSI C99的MEX代码?,c,windows,matlab,makefile,mex,C,Windows,Matlab,Makefile,Mex,似乎我在这里遇到了一个真正的问题,因为我对Linux系统缺乏任何知识: 我下载了一些开源代码 是用C写的 使用complex.h,所以我假设它是ANSI C99 带有专为Linux系统下编译而设计的makefiles 提供IDL、MATLAB、Python等接口 我确实很熟悉在基于Windows的MATLAB环境下编译C/MEX文件,但在这种情况下,我甚至不知道从哪里开始。该项目分布在多个文件夹中,由几十个源文件和头文件组成。首先,我之前用来编译MEX文件的Visual Studio 2010编

似乎我在这里遇到了一个真正的问题,因为我对Linux系统缺乏任何知识: 我下载了一些开源代码

是用C写的

使用complex.h,所以我假设它是ANSI C99

带有专为Linux系统下编译而设计的makefiles

提供IDL、MATLAB、Python等接口

我确实很熟悉在基于Windows的MATLAB环境下编译C/MEX文件,但在这种情况下,我甚至不知道从哪里开始。该项目分布在多个文件夹中,由几十个源文件和头文件组成。首先,我之前用来编译MEX文件的Visual Studio 2010编译器不符合C99标准,也就是说,它无法识别复杂的.h头

任何有助于完成该项目的帮助都将不胜感激。特别是,我有以下问题: 1是否有可能从MEX文件中自动提取编译信息并将其传输到Windows reality?
2是否有任何免费的编译器能够编译C99的东西,这也很容易嵌入到MATLAB中?

我已经这样做了,将内部遗留代码inc.mex文件移动到了Win64。我不能推荐这种经历

您将不得不重新编译,无法绕过它。 支持的mex编译器 如果Pelles C与您的MATLAB版本配合使用,那么使用Pelles C的文件交换条目可能是一个起点。 我猜有一个主makefile,然后通过子目录中的makefiles工作——通读Linux下的编译说明,它会让您了解正在发生的事情,还可能讨论如果您想更改编译器,应该怎么做。一旦找到了兼容的编译器,下一步就是了解makefile在做什么,并相应地编辑它们,更改路径、编译器、编译器标志等


然后,从一段时间前的记忆中,您可以通过越来越模糊的编译器错误享受神奇的神秘之旅。记录所有内容,因为如果您确实让它工作起来,您就不会有心情再这样做两次。

Windows上的MATLAB R2016b现在支持MinGW编译器。我成功地使用它编译了主要为Linux/gcc编写的代码。我从MATLAB search MinGW中的附加菜单安装了它

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

legacy_code('compile', def, {'CFLAGS=-std=c99'})
我很难正确使用flag命令,我有一些额外的引用,显然破坏了事情,并询问了MathWorks,所以这要归功于他们的支持团队

如果您使用的是mex,我希望做一些非常类似的事情

我猜makefile与您的应用程序无关;您需要告诉mex或legacy_code函数关于构建整个应用程序所需的所有文件,或者根据预构建库(听起来您没有)进行链接


我希望这有帮助

使用mingw编译似乎是显而易见的解决方案。您可以尝试最新的MSVC,它支持complex.h和C99 libs。就我个人而言,我建议使用像mingw这样的真正的C编译器。