MATLAB 代码中使用的 C++ 代码

Posted

技术标签:

【中文标题】MATLAB 代码中使用的 C++ 代码【英文标题】:C++ Code used in MATLAB code 【发布时间】:2015-02-19 17:31:44 【问题描述】:

我有一个 MATLAB 代码及其使用 C++ 代码。

当我尝试使用 MATLAB Coder 构建它时出现错误

未定义的函数或变量'nameOfC++file'。

如何在构建之前包含/定义它?

PS : matlab 代码无需事先定义此 C++ 文件即可工作。

编辑

怎么称呼

r = mlist(d, p);

我有两个文件,mlist.cpp 和 mlist.dll

【问题讨论】:

如果以下答案不充分,提供以下内容会很有帮助:MATLAB 代码的 sn-p,显示 C++ 代码的使用方式,您如何调用 @987654322 的示例@ 命令,以及您正在使用的 MATLAB Coder 选项 如果您看到下面的步骤 (4),要调用 C++ 函数 mlist,您应该使用 coder.ceval('mlist',...) 而不是像 MATLAB 函数那样直接通过名称调用它。 【参考方案1】:

一些开始的建议:

    配置 MATLAB Coder 以生成 C++ 代码以确保一致的编译和链接:

    cfg = coder.config('lib');
    cfg.TargetLang = 'C++';
    codegen -config cfg ...
    

    包括所需的标题。在您的 MATLAB 代码中用于代码生成:

    function y = example(x)
    %#codegen
    coder.cinclude('a_header.h');
    coder.cinclude('<a_system_header>');
    

    如有必要,将包含路径添加到配置对象 cfg:

    cfg.CustomInclude = '/directory/with/headers /other/directory';
    

    使用coder.ceval 调用您的外部函数:

    function y = example(x)
    %#codegen
    coder.cinclude('a_header.h');
    coder.cinclude('<a_system_header>');
    % Assume y is a double scalar. Change this to match the return type
    % of someExternalFunction
    y = 0;
    y = coder.ceval('someExternalFunction',x);
    

    将任何必要的 C++ 源文件 (.cpp)、目标文件 (.o, .obj) 或库 (.a, .so, .lib, .dylib 等) 传递给 codegen 命令:

    codegen -config cfg matlab_function_name source.cpp library.so ...
    

external code integration 上的文档显示了用于封装对外部代码的依赖项的其他技术。使用这些,您可以从传递给 MATLAB Coder 的 MATLAB 代码中指定必要的库、外部源代码、编译器标志和其他选项。

这意味着您的代码变得独立,因此无需修改配置对象,并且对codegen 的调用无需包含源文件、目标文件和库。

【讨论】:

以上是关于MATLAB 代码中使用的 C++ 代码的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB 的函数句柄

八度更改 UIControl 位置

在matlab中使用for循环求1到10阶乘的值

以神经网络使用为例的Matlab和Android混合编程

毕设题目:Matlab图像边缘检测

Debian系统中如何将matlab编译后的代码集成到c++中