用c++墨西哥人的执行功能
MATLAB®可以运行c++墨西哥人函数在一个单独的过程。运行一个c++墨西哥人功能使您能够在一个单独的过程:
隔离MATLAB c++墨西哥人崩溃的过程函数。
使用一些第三方库的c++墨西哥人与MATLAB函数不兼容。
节省内存,运行多个c++墨西哥人函数在一个单一的过程。
c++调试器附加到墨西哥人主机的过程。
中断函数执行使用c++墨西哥人Ctrl + C
请注意
大小的变量之间传递c++和MATLAB仅限于2 GB当你调用一个c++函数进程外。这一限制适用于数据+支持之间的信息传递过程。万博1manbetx
如何运行的过程
按照以下步骤运行你的c++墨西哥人功能的流程:
写下你的c++墨西哥人使用指令的功能和构建它构建c++墨西哥人项目。没有所需的代码之间的差异函数编写的进程内和独立进程执行。
创建一个墨西哥人主机进程使用
mexhost
函数。使用
函数宏指令
的方法matlab.mex.MexHost
返回的对象mexhost
运行你的c++墨西哥人功能主机的过程。
在运行的过程中,c++墨西哥人函数总是在相同的文件夹执行MATLAB当前文件夹。改变了MATLAB当前文件夹创建墨西哥人主机对象结果后在同一c++墨西哥人函数上下文的变化。
运行arrayProduct
墨西哥人功能的过程
下面的例子运行arrayProduct
用c++墨西哥人功能。c++墨西哥人源代码文件中是可用的arrayProduct.cpp
。本例使用c++墨西哥人功能,打开arrayProduct.cpp
MATLAB源文件,将其保存在你的路径,并构建c++墨西哥人使用的指令功能构建c++墨西哥人项目。
在构建c++墨西哥人函数之后,开始墨西哥人主机进程使用mexhost
函数。这个函数返回一个对象的matlab.mex.MexHost
类。
使用函数宏指令
方法运行arrayProduct
c++墨西哥人功能主机的过程。通过c++墨西哥人函数名和参数函数宏指令
。返回结果的MATLAB分配的输出函数宏指令
。
mh = mexhost;结果=函数宏指令(mh),“arrayProduct”2 (1 2 3 4))
结果= 2 4 6 8
运行arrayProduct
在另一个墨西哥人主机的过程。首先创建墨西哥人主机进程通过调用mexhost
再分配的输出到一个不同的变量。然后调用函数宏指令
在新的宿主。
mh2 = mexhost;result2 =函数宏指令(mh2,“arrayProduct”2,兰德(10));
您可以运行其它c++墨西哥人在同一进程中使用相同的功能matlab.mex.MexHost
返回的对象mexhost
。
result2 =函数宏指令(mh2,“anotherMexFunction”,输入);
流程生命周期
墨西哥人主机流程生命周期耦合的生命周期matlab.mex.MexHost
返回的对象mexhost
。像任何处理对象,MATLAB调用删除
方法当对象不再被引用。如果MATLAB调用删除
或者你打电话给删除
对象明确,MATLAB相关的过程结束MexHost
对象。
您可以显式地通过调用过程结束清晰的
函数使用这些选项:
清晰的
返回的变量mexhost
函数清晰的
类
,清晰的
java
,或清晰的
所有
重建一个c++墨西哥人的功能
的墨西哥人
命令之前自动卸载c++墨西哥人功能重建。因此,您不需要显式地卸载c++墨西哥人从墨西哥人主机功能的过程。
您可以显式地卸载所有c++墨西哥人从墨西哥人主机进程通过调用函数清晰的
墨西哥人
或清晰的
功能
。卸载一个特定的函数通过调用c++墨西哥人清晰的
在函数名。
为了防止c++墨西哥人的卸载功能,使用mexLock
函数。解锁c++墨西哥人功能,使用mexUnlock
。这些功能设置或设置一个标记为c++墨西哥人函数在主机进程控制c++墨西哥人的卸载功能。
让墨西哥人主机信息的过程
使用matlab.mex.MexHost
墨西哥人主机对象来获得信息的过程。这些属性提供的信息流程和加载功能。
EnvironmentVariables
包含环境变量设置的名称和值的过程。功能
包含所有c++墨西哥人的名字函数加载到墨西哥人主机的过程。ProcessName
包含墨西哥人主机进程的名称,这是MATLABMexHost
默认情况下。ProcessIdentifier
包含进程标识符。
这些属性的更多信息,请参阅matlab.mex.MexHost
。
总是耗尽的过程
在某些情况下,你可能总是想运行你的c++函数用墨西哥人。例如,运行的过程可能是必要的,如果有第三方库之间的冲突MATLAB和C + +墨西哥人功能。
提供一个方便的方式来运行c++墨西哥人功能的过程中,创建一个包装器MATLAB函数。包装器函数创建墨西哥人主机对象和c++运行墨西哥人在这个过程中函数。
例如,假设您希望创建一个包装器函数arrayProduct.cpp
c++墨西哥人函数包含在文档作为一个例子。创建一个MATLAB函数的名称arrayProduct.m
把这个文件放在一个文件夹,在MATLAB的道路。构建c++墨西哥人的功能和墨西哥人编译文件分配一个不同的名称。
创建一个包装器函数matlab.mex.MexHost
对象分配给一个持久变量,这样过程是不会破坏之间的后续调用包装器函数。使用这个对象调用的函数函数宏指令
方法用c++墨西哥人的执行功能。如果墨西哥人主机对象是无效的,那么该函数创建了一个墨西哥人主机的过程。
函数结果= arrayProduct (scalefactor inputarray)持续的mh如果~ (isa (mh),“matlab.mex.MexHost”)& & (mh))是否是可用的mh = mexhost;结束结果=函数宏指令(mh),“arrayProductMEX”、scalefactor inputarray);结束
构建c++墨西哥人功能,打开arrayProduct.cpp
MATLAB源文件并将其保存在你的路径。构建c++墨西哥人功能使用说明这个话题,构建c++墨西哥人项目。
下面的命令构建墨西哥人文件的根名称arrayProductMEX
并将其与包装器函数的文件夹,这被认为是MyPathFolder
在这个例子中。的墨西哥人
命令创建文件夹,如果它不存在。
墨西哥人与产出arrayProductMEX-outdirMyPathFolderarrayProduct.cpp
使用c++墨西哥人功能,从命令行调用它像任何函数通过包装器函数。
结果= arrayProduct (2 (1 2 3 4));结果
结果= 2 4 6 8
下面的代码调用c++函数在一个墨西哥人为
循环。第一次调用arrayProduct
创建了墨西哥人主机的过程。后续调用使用相同的过程,除非过程遭到破坏,例如,一个坠毁的c++墨西哥人的功能。
为k (k,:) = = 1:5结果arrayProduct (k, (1 2 3 4));结束结果
结果= 1 2 3 4 2 4 6 8 3 6 9 12 4 8 12 16 5 10 15 20
摧毁墨西哥人主机过程,清除所有的函数定义的墨西哥人主机过程变量(mh
在这个例子中)作为持久。在这个例子中,清楚的arrayProduct.m
函数。
清晰的arrayProduct.m
调用清晰的
功能
造成的破坏matlab.mex.MexHost
对象存储在持久变量,因此墨西哥人主机进程终止。
调试用墨西哥人的功能
您可以将一个c++调试器附加到你的c++墨西哥人的功能和设置断点调试您的程序。下面是设置的步骤和调试一个c++墨西哥人功能的过程。
构建c++源代码墨西哥人使用
墨西哥人
命令- g
选项包含调试符号。创建一个主进程使用
mexhost
函数。这个函数返回一个对象的matlab.mex.MexHost
。得到的进程标识符
matlab.mex.MexHost
对象ProcessIdentifier
财产。使用进程标识符将一个c++调试器附加到进程。
在源代码中插入断点。
运行进程外使用c++墨西哥人功能
函数宏指令
方法。
有关使用特定调试器的信息,看到这些调试器的文档。
调试使用微软Visual Studio
确保Visual Studio®是你选择的c++编译器。这个示例使用微软®Visual Studio2015年。
cpp = mex.getCompilerConfigurations (“c++”,“选择”);cpp.Name
ans = ' Microsoft Visual c++ 2015 '
建立你的c++源代码墨西哥人使用
墨西哥人
命令- g
选择。这个示例假设您有一个c++源文件墨西哥人命名myMexFunction.cpp
。墨西哥人- gmyMexFunction.cpp
创建一个墨西哥人主机进行处理并返回
MexHost
对象。mh = mexhost;
启动Visual Studio。不要退出你的MATLAB会话。
从Visual Studio调试菜单中,选择连接到过程。
在附加到进程对话框中,选择
MATLABMexHost
过程,然后单击附加。Visual Studio加载数据,然后显示一个空的代码窗格。
打开你的c++墨西哥人通过点击源文件文件>开放>文件并选择文件。
设置一个断点,右键单击所需的代码行并单击断点>插入断点在上下文菜单中。
在MATLAB c++运行墨西哥人使用功能的过程
matlab.mex.MexHost
函数宏指令
方法。结果=函数宏指令(mh),“myMexFunction”input1 input2,…)
使用提供的功能调试器来调试源代码。
在调试Linux系统
在Linux上®系统,您可以使用诸如GNU调试器®广东发展银行
调试器。按照以下步骤使用广东发展银行
调试器。
建立你的c++源代码墨西哥人使用
墨西哥人
命令- g
选择。这个示例假设您有一个c++源文件墨西哥人命名myMexFunction.cpp
。墨西哥人- gmyMexFunction.cpp
创建一个墨西哥人主机进行处理并返回
MexHost
对象。mh = mexhost;
得到的进程标识符
ProcessIdentifier
财产的MexHost
对象。返回值是一个字符串代表墨西哥人主机进程的标识符。例如,mh.ProcessIdentifier
ans = " 13892 "
每个进程创建的进程标识符是不同的。
将调试器附加到墨西哥人从Linux终端主机的过程。例如,使用GNU
广东发展银行
调试器,叫广东发展银行
与c++墨西哥人文件名和你从墨西哥人获得主人的进程标识符在MATLAB对象:gdb myMexFunction pid = 13892
设置断点的c++函数墨西哥人。例如,使用
广东发展银行
,设置断点myMexFunction.cpp
在第21行:打破myMexFunction.cpp: 21
从MATLAB c++运行进程外使用墨西哥人功能
matlab.mex.MexHost
函数宏指令
方法。结果=函数宏指令(mh),“myMexFunction”input1 input2,…)
MATLAB等待响应的调试器。
从Linux终端,使用提供的功能调试器来调试源代码。
在调试麦金塔电脑系统
在麦金塔电脑系统,使用LLDB调试器。
建立你的c++源代码墨西哥人使用
墨西哥人
命令- g
选择。这个示例假设您有一个c++源文件墨西哥人命名myMexFunction.cpp
。墨西哥人- gmyMexFunction.cpp
创建一个墨西哥人主机进行处理并返回
MexHost
对象。mh = mexhost;
得到的进程标识符
ProcessIdentifier
财产的MexHost
对象。返回值是一个字符串代表墨西哥人主机进程的标识符。mh.ProcessIdentifier
ans = " 13892 "
每个进程创建的进程标识符是不同的。
将调试器附加到墨西哥人主机的过程macOS终端。调用
lldb
与墨西哥人主机进程标识符,你从墨西哥人获得在MATLAB宿主对象。例如,假设进程标识符13892年
LLDB调试器附加到这个过程:lldb - p 13892
源代码中设置一个断点。例如,这个命令设置一个断点
myMexFunction.cpp
行号21。断点设置- f myMexFunction。cpp - l 21
从MATLAB c++运行进程外使用墨西哥人功能
matlab.mex.MexHost
函数宏指令
方法。结果=函数宏指令(mh 'myMexFunction input1 input2,…)
MATLAB等待响应的调试器。
输入
C
或继续
从macOS终端。程序在断点停止执行。从macOS终端,使用提供的功能调试器来调试源代码。