我有一个Windows Matlab R2020A,能够为我的Matlab函数生成C源代码。但是,我需要在Linux平台上运行一个MEX文件(为了速度),该平台安装了Matlab(没有编码器),没有办法安装它(甚至是试用版)。请提供在Linux(Ubuntu)系统上编译这个Matlab生成的C代码的步骤。我猜它可以用gcc完成。我在网上找不到清晰的描述,因为这个过程看起来非常复杂,因为需要给予gcc的命令行参数很模糊(我很少编译C代码)。
z9gpfhce1#
请注意,如果您需要MEX文件,使用MATLAB编码器应用程序生成C代码是不够的。MEX文件必须包含mexFunction函数,该函数不是由编码器应用程序生成的。作为第一步,我将确保您的编译器是MATLAB支持的MEX文件的创建。您可以在Linux here上找到支持的编译器。然后我将检查编译器是否设置为Matlab使用它,如here所示。最后,我将看一看Mathworks自己提供的一些示例:here一旦C代码(带有mexFunction)准备就绪,您可以使用mex命令编译它,并在Linux平台上使用它,而无需或只需进行最小的调整,这取决于您对mex.h中定义的函数的依赖程度(如果您想要生成MEX文件,则C文件必须导入该文件头)。您需要mexFunction为Matlab提供的接口,以便能够与编译后的函数交换输入和输出。(可能在其他C文件中定义),并像通常在C中所做的那样从mexFunction中调用它们。基本上,您可以在C中创建自己的库,然后通过专用的mexFunction在Matlab中使用它们。mex.h还提供了将C数据结构“转换”为Matlab数据结构的API(例如,数组、单元格数组等,全部通过mxArray类型)。有一段学习曲线,主要花在理解如何在标准C和Matlab之间来回转换数据上,但这当然值得你花时间。(例如仅在绝对必要时切换到mxArray类型),您最终可以获得可用于标准C程序和Matlab应用程序的函数库
MEX
mexFunction
C
mex
mex.h
mxArray
1条答案
按热度按时间z9gpfhce1#
请注意,如果您需要
MEX
文件,使用MATLAB编码器应用程序生成C代码是不够的。MEX
文件必须包含mexFunction
函数,该函数不是由编码器应用程序生成的。作为第一步,我将确保您的编译器是MATLAB支持的MEX文件的创建。您可以在Linux here上找到支持的编译器。然后我将检查编译器是否设置为Matlab使用它,如here所示。最后,我将看一看Mathworks自己提供的一些示例:here
一旦
C
代码(带有mexFunction
)准备就绪,您可以使用mex
命令编译它,并在Linux平台上使用它,而无需或只需进行最小的调整,这取决于您对mex.h
中定义的函数的依赖程度(如果您想要生成MEX
文件,则C
文件必须导入该文件头)。您需要
mexFunction
为Matlab提供的接口,以便能够与编译后的函数交换输入和输出。(可能在其他C
文件中定义),并像通常在C
中所做的那样从mexFunction
中调用它们。基本上,您可以在C
中创建自己的库,然后通过专用的mexFunction
在Matlab中使用它们。mex.h
还提供了将C
数据结构“转换”为Matlab数据结构的API(例如,数组、单元格数组等,全部通过mxArray
类型)。有一段学习曲线,主要花在理解如何在标准
C
和Matlab之间来回转换数据上,但这当然值得你花时间。(例如仅在绝对必要时切换到mxArray
类型),您最终可以获得可用于标准C
程序和Matlab应用程序的函数库