创建C代码文件
在MATLAB中,可以使用mex命令来将C/C++代码编译成可执行文件。首先需要创建C代码文件,例如myfunction.c。在该文件中编写C代码实现所需的功能。
创建MATLAB接口函数
在MATLAB中,需要创建一个接口函数来调用C代码。该接口函数的命名格式为mexFunction,并且需要包含以下参数:
plaintext
Copy code
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
其中,nlhs和plhs[]表示输出参数的数量和指针数组,nrhs和prhs[]表示输入参数的数量和指针数组。在该接口函数中,需要将输入参数转换为C语言数据类型,并调用C代码实现所需的功能。最后,将输出结果转换为MATLAB数据类型,并存储到plhs[]中。
3. 编写mex命令
在终端中输入以下命令:
plaintext
Copy code
mex myfunction.c
该命令将编译myfunction.c文件,并生成可执行文件myfunction.mex。在编译过程中,需要指定所需的头文件和库文件。
4. 调用C函数进行debug
在MATLAB中,可以使用dbstop命令设置断点,然后使用dbstep命令逐语句执行代码,进行debug。例如:
plaintext
Copy code
dbstop('myfunction.c', 'line', 10)
myfunction()
dbstep
该代码将在myfunction.c文件的第10行设置断点,然后调用myfunction函数并逐语句执行代码。
需要注意的是,在编译和debug过程中可能会出现各种问题,例如编译错误、链接错误、内存泄漏等。因此,建议熟悉C语言编程和debug技巧,并在编译和debug过程中仔细检查代码,以确保程序的正确性和稳定性。
把一个简单的m代码编译成C++接口的DLL,然后在C++程序中调用。为了简单起见,这里的C++程序是一个Win32 Console程序,而不是Windows图形界面的程序,不过不妨碍我们的讨论。\x0d\x0a\x0d\x0a下面是这个例子用到的m代码。它定义了一个名为myadd2的函数\x0d\x0a\x0d\x0afunction [y,z] = myadd2(a, b)\x0d\x0a\x0d\x0a% dummy function, just to demonstrate the idea\x0d\x0a\x0d\x0ay = a+b\x0d\x0a\x0d\x0az = a+2*b\x0d\x0a\x0d\x0aend\x0d\x0a复制代码\x0d\x0a首先把这个函数编译成C++接口的DLL。为此,我们需要先设置MATLAB编译器。具体做法是在MATLAB命令行执行“mbuild -setup”。然后用下面这行命令把myadd2函数编译成一个C++接口的DLL:\x0d\x0a\x0d\x0amcc -W cpplib:libmyadd2 -T link:lib myadd2\x0d\x0a复制代码\x0d\x0a结果,我们将会得到包含libmyadd2.dll,libmyadd2.ctf,libmyadd2.h,libmyadd2.lib等在内的一些文件。接下来我们只需要这四个文件。\x0d\x0a\x0d\x0a然后在VS2005中创建一个Win32 Console的VC++工程,我在测试时取名为testmyadd2_r2007b。把以上四个文件拷贝到VC++工程的源代码所在目录。\x0d\x0a\x0d\x0a接下来设置VC++,让它能找到MATLAB接口函数的定义及连接库函数。可以有两种设置方式:一种是改VS2005中关于VC++的设置,这样的好处是每个新的工程都能自动获得这个设定;而另一种是只改当前工程的设置,也就是设置只对该工程有效。这里用后一种方式。\x0d\x0a\x0d\x0a在VS2005中打开工程testmyadd2_r2007b,选择菜单“Project-->Properties,在出来的对话框上,把MATLAB提供的include路径加到VC++的头文件搜索路径。\x0d\x0a\x0d\x0a然后把相应的lib所在目录加到linker的额外搜索路径上\x0d\x0a\x0d\x0a接下来,告诉VC++,我们的这个程序需要连接到另外两个额外的库函数:libmyadd2.lib和mclmcrrt.lib。中间用空格隔开\x0d\x0a\x0d\x0a最后则是程序代码。这个程序只有一个main函数,其完整代码附在下面给大家参考。\x0d\x0a\x0d\x0a#include "stdafx.h"\x0d\x0a\x0d\x0a#include \x0d\x0a\x0d\x0a#include "mclmcr.h"\x0d\x0a\x0d\x0a#include "mclcppclass.h"\x0d\x0a\x0d\x0a#include "libmyadd2.h"\x0d\x0a\x0d\x0aint _tmain(int argc, _TCHAR* argv[])\x0d\x0a\x0d\x0a{\x0d\x0a\x0d\x0astd::cout 回答于 2022-12-14如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:一、生成独立可执行的程序(exe文件)步骤
1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2003实现。
2、设置编译器。在matlab命令行输入mbuild –setup以及mex –setup,选择安装的c编译器。
3、调用编译器。此处使用MATLAB下的一个GUI平台deploytool下完全实现。在命令窗口输入deploytool即可看到。具体使用方法请Help。
当然,也可以输入mcc -m filaname, filaname为要转成exe的m文件;
注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -mfilaname;
4、安装<matlab path>\toolbox\compiler\deploy\win32目录下的MCRInstaller。
二、脱离matlab运行可执行程序
MCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:
<matlab path>\toolbox\compiler\deploy\win32
文件名为MCRInstaller.exe。可将其拷贝到自己的文件夹中,(7.0以前的版本是mglinstaller.exe)。
在MATLAB里运行可执行程序的办法是在前面加一个!,比如:!picshow,后缀名可有可无。
在其它没有安装matlab的机器上运行exe文件前:
首先安装matlab的运行环境。在同一机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。
其次是要将“MCRinstaller.exe安装目录\runtime\win32”这个路径添加到该计算机的环境变量中,通常是自动加载。
如果没有,也可手动安装,添加的方法是:
右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。
注:在安装过程中会d出让安装Microsoft.NETFramework可以不用安装。
最后就是将编译生成的相相关文件拷贝到同一目录下,双击即可运行。
问题:目前此方法可完全运行在没有安装MATLAB以及C/C++的电脑上,但是如果是在AMD的CPU可以运行,但是不会出现任何MATLAB编译的界面。
美中不足就是,运行的时候dos的那个黑色地窗口一直存在。下面将实现去除黑屏的办法:
消除运行MATLAB生成的exe程序的dos黑屏的办法
基于MATLAB生成exe文件后,每次运行都存在dos黑屏的问题,现在可以通过以下方法解决:
方法一: 在命令窗口输入:
cd(prefdir)
edit compopts.bat
在打开的文件最后添加以下语句:
A.VC环境下:
set LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup
B.LCC环境下:
set LINKFLAGS=%LINKFLAGS% -subsystemwindows
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)