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

时间:2015-02-19 17:31:45

标签: c++ matlab matlab-coder

我有一个MATLAB代码,它使用的是C ++代码。

当我尝试使用MATLAB Coder构建它时,我收到错误

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

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

PS:matlab代码无法预先定义此C ++文件。

编辑

如何调用

r = mlist(d, p);

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

1 个答案:

答案 0 :(得分:0)

一些建议开始:

  1. 配置MATLAB编码器以生成C ++代码,以确保编译和链接的一致性:

    cfg = coder.config('lib');
    cfg.TargetLang = 'C++';
    codegen -config cfg ...
    
  2. 包含所需的标题。在用于代码生成的MATLAB代码中使用:

    function y = example(x)
    %#codegen
    coder.cinclude('a_header.h');
    coder.cinclude('<a_system_header>');
    
  3. 如有必要,请在配置对象cfg中添加包含路径:

    cfg.CustomInclude = '/directory/with/headers /other/directory';
    
  4. 使用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);
    
  5. 将任何必要的C ++源文件(.cpp),目标文件(.o, .obj)或库(.a, .so, .lib, .dylib等)传递给codegen命令:

    codegen -config cfg matlab_function_name source.cpp library.so ...
    
  6. external code integration上的文档显示了封装外部代码依赖关系的其他技术。使用这些允许您指定必要的库,外部源代码,编译器标志以及传递给MATLAB Coder的MATLAB代码中的其他选项。

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