主要内容

用c++墨西哥人的执行功能

MATLAB®可以运行c++墨西哥人函数在一个单独的过程。运行一个c++墨西哥人功能使您能够在一个单独的过程:

  • 隔离MATLAB c++墨西哥人崩溃的过程函数。

  • 使用一些第三方库的c++墨西哥人与MATLAB函数不兼容。

  • 节省内存,运行多个c++墨西哥人函数在一个单一的过程。

  • c++调试器附加到墨西哥人主机的过程。

  • 中断函数执行使用c++墨西哥人Ctrl + C

请注意

大小的变量之间传递c++和MATLAB仅限于2 GB当你调用一个c++函数进程外。这一限制适用于数据+支持之间的信息传递过程。万博1manbetx

如何运行的过程

按照以下步骤运行你的c++墨西哥人功能的流程:

  1. 写下你的c++墨西哥人使用指令的功能和构建它构建c++墨西哥人项目。没有所需的代码之间的差异函数编写的进程内和独立进程执行。

  2. 创建一个墨西哥人主机进程使用mexhost函数。

  3. 使用函数宏指令的方法matlab.mex.MexHost返回的对象mexhost运行你的c++墨西哥人功能主机的过程。

在运行的过程中,c++墨西哥人函数总是在相同的文件夹执行MATLAB当前文件夹。改变了MATLAB当前文件夹创建墨西哥人主机对象结果后在同一c++墨西哥人函数上下文的变化。

运行arrayProduct墨西哥人功能的过程

下面的例子运行arrayProduct用c++墨西哥人功能。c++墨西哥人源代码文件中是可用的arrayProduct.cpp。本例使用c++墨西哥人功能,打开arrayProduct.cppMATLAB源文件,将其保存在你的路径,并构建c++墨西哥人使用的指令功能构建c++墨西哥人项目

在构建c++墨西哥人函数之后,开始墨西哥人主机进程使用mexhost函数。这个函数返回一个对象的matlab.mex.MexHost类。

使用函数宏指令方法运行arrayProductc++墨西哥人功能主机的过程。通过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.cppc++墨西哥人函数包含在文档作为一个例子。创建一个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.cppMATLAB源文件并将其保存在你的路径。构建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

  1. 确保Visual Studio®是你选择的c++编译器。这个示例使用微软®Visual Studio2015年。

    cpp = mex.getCompilerConfigurations (“c++”,“选择”);cpp.Name
    ans = ' Microsoft Visual c++ 2015 '
  2. 建立你的c++源代码墨西哥人使用墨西哥人命令- g选择。这个示例假设您有一个c++源文件墨西哥人命名myMexFunction.cpp

    墨西哥人- gmyMexFunction.cpp
  3. 创建一个墨西哥人主机进行处理并返回MexHost对象。

    mh = mexhost;
  4. 启动Visual Studio。不要退出你的MATLAB会话。

  5. 从Visual Studio调试菜单中,选择连接到过程

    在附加到进程对话框中,选择MATLABMexHost过程,然后单击附加

  6. Visual Studio加载数据,然后显示一个空的代码窗格。

  7. 打开你的c++墨西哥人通过点击源文件文件>开放>文件并选择文件。

  8. 设置一个断点,右键单击所需的代码行并单击断点>插入断点在上下文菜单中。

  9. 在MATLAB c++运行墨西哥人使用功能的过程matlab.mex.MexHost函数宏指令方法。

    结果=函数宏指令(mh),“myMexFunction”input1 input2,)
  10. 使用提供的功能调试器来调试源代码。

在调试Linux系统

在Linux上®系统,您可以使用诸如GNU调试器®广东发展银行调试器。按照以下步骤使用广东发展银行调试器。

  1. 建立你的c++源代码墨西哥人使用墨西哥人命令- g选择。这个示例假设您有一个c++源文件墨西哥人命名myMexFunction.cpp

    墨西哥人- gmyMexFunction.cpp
  2. 创建一个墨西哥人主机进行处理并返回MexHost对象。

    mh = mexhost;
  3. 得到的进程标识符ProcessIdentifier财产的MexHost对象。返回值是一个字符串代表墨西哥人主机进程的标识符。例如,

    mh.ProcessIdentifier
    ans = " 13892 "

    每个进程创建的进程标识符是不同的。

  4. 将调试器附加到墨西哥人从Linux终端主机的过程。例如,使用GNU广东发展银行调试器,叫广东发展银行与c++墨西哥人文件名和你从墨西哥人获得主人的进程标识符在MATLAB对象:

    gdb myMexFunction pid = 13892
  5. 设置断点的c++函数墨西哥人。例如,使用广东发展银行,设置断点myMexFunction.cpp在第21行:

    打破myMexFunction.cpp: 21
  6. 从MATLAB c++运行进程外使用墨西哥人功能matlab.mex.MexHost函数宏指令方法。

    结果=函数宏指令(mh),“myMexFunction”input1 input2,)

    MATLAB等待响应的调试器。

  7. 从Linux终端,使用提供的功能调试器来调试源代码。

在调试麦金塔电脑系统

麦金塔电脑系统,使用LLDB调试器。

  1. 建立你的c++源代码墨西哥人使用墨西哥人命令- g选择。这个示例假设您有一个c++源文件墨西哥人命名myMexFunction.cpp

    墨西哥人- gmyMexFunction.cpp
  2. 创建一个墨西哥人主机进行处理并返回MexHost对象。

    mh = mexhost;
  3. 得到的进程标识符ProcessIdentifier财产的MexHost对象。返回值是一个字符串代表墨西哥人主机进程的标识符。

    mh.ProcessIdentifier
    ans = " 13892 "

    每个进程创建的进程标识符是不同的。

  4. 将调试器附加到墨西哥人主机的过程macOS终端。调用lldb与墨西哥人主机进程标识符,你从墨西哥人获得在MATLAB宿主对象。例如,假设进程标识符13892年LLDB调试器附加到这个过程:

    lldb - p 13892
  5. 源代码中设置一个断点。例如,这个命令设置一个断点myMexFunction.cpp行号21。

    断点设置- f myMexFunction。cpp - l 21
  6. 从MATLAB c++运行进程外使用墨西哥人功能matlab.mex.MexHost函数宏指令方法。

    结果=函数宏指令(mh 'myMexFunction input1 input2,)

    MATLAB等待响应的调试器。

  7. 输入C继续macOS终端。程序在断点停止执行。

  8. macOS终端,使用提供的功能调试器来调试源代码。

另请参阅

|

相关的话题